Array
(
)

WPF e MVVM duvida

Gustavo Hernandez
   - 17 dez 2012

Sou novato neste padrão de desenvolvimento, e estou tendo uma dificuldade em realizar a seguinte operação tentarei explicar com o seguinte exemplo:
Tenho uma View onde faço uma consulta das pessoas cadastradas e exibe no grid , chamarei esta de "View1", nesta tela também tem os botes de operações como Inserir, Consultar, Alterar, Excluir.
Tenho também outra View que chamarei de "View2", esta tela por sua vez terá os componentes para entrada dos dados, textbox, checkbox, combobox etc, e o botão Salvar e Cancelar. Nesta tela será realiza a inclusão, consulta e alteração do cadastro das pessoas.
A duvida é a seguinte:
-Quando clicar no botão inserir da view1 , abrir a view2 para cadastrar os dados da nova pessoa e também como salvo estes dados, ou transporto eles de uma ViewModel para Outra ? Estou usando um exemplo que consegui, mas não esta dando muito certo no momento em que tento gravar os dados.
Se servir de parâmetro, estou tentando realizar a seguinte procedimento Na View1 ” ViewModel1":
Quando clicar no botão inserir :
Possui Propriedade RelayCommand que executa uma método que instancia a View2 e a ViewModel 2 e define o DataContext para a tela e depois chama a tela 2 e aguarda o retorno da mesma que devera receber os dados da propriedade ManterPessoa e passar para a propriedade Pessoa:
private RelayCommand _inserirPessoa;
public RelayCommand InserirPessoa
{
get
{
if (_inserirPessoa == null)
_inserirPessoa = new RelayCommand(o => ExecInserirPessoa());
return _inserirPessoa;
}
}
private void ExecInserirCliente()
{
FRM002 tela002 = new FRM002();
FRM002ViewModel vm002 = new FRM002ViewModel();
tela002.DataContext = vm002;
if (tela002.ShowDialog().Value)
{
Pessoa.Add(vm002.ManterPessoa);
MessageBox.Show("Inclusão realizada com sucesso !");
}
}
Na ViewModel 2 , apos terminar de digitar os dados da nova pessoa, quando clicar no botão salvar tenho a seguinte situação que deveria realizar a inclusão :
private RelayCommand _salvarPessoa;
public RelayCommand SalvarPessoa
{
get
{
if (_salvarPessoa == null)
_salvarPessoa = new RelayCommand(o => ExecSalvarPessoa((Window)o));
return _salvarPessoa;
}
}
private void ExecSalvarPessoa(Window paramSalvar)
{
**-Neste ponto faça a atribuição dos dados que foram digitados para a propriedade privada, como são muitos dados informarei somente um exemplo
_manterPessoa.DataCadastroPessoa = DataCadastroSelecionado;
_manterPessoa.NomePessoa = ManterPessoa.NomePessoa;
Etc...
WCFSysGerenciaClient proxySysGer = new WCFSysGerenciaClient();
proxySysGer.InserirPessoaAsync(_manterPessoa, paramSalvar);
proxySysGer.InserirPessoaCompleted += new EventHandler<InserirPessoaCompletedEventArgs>(proxySysGer_InserirPessoaCompleted);
}
void proxySysGer_InserirPessoaCompleted(object sender, InserirPessoaCompletedEventArgs e)
{
if (e.Error == null)
{
var tela002 = e.UserState as Window;
tela002.DialogResult = true; <--* o erro acontece aqui !
tela002.Close();
}
else
{
MessageBox.Show("Erro ao Salvar Pessoa Verifique !", "Manutenção Pessoa", MessageBoxButton.OK, MessageBoxImage.Error);
}
}
O erro esta acontecendo no código : “tela002.DialogResult = true;” que exibe a seguinte mensagem : {"Object reference not set to an instance of an object."}
Se precisarem de mais alguma informação e só perguntar
Se alguém puder ajudar agradeço muito .
Valeu pessoal