none
Duvidas MVVM - Transportar mensagem do MODEL para a VIEW RRS feed

  • Pergunta

  • Boa Tarde,

     

    Sou iniciante com o padrão MVVM e estou em duvidas com relação a troca de mensagens de um objeto da camada MODEL com a VIEW.

     

    Exemplo: Possuo uma classe na camada MODEL chamada Usuario com duas propriedades: Login e Senha. E um metodo denominado AlterarSenha. Para informar na VIEW uma string de resposta desse metodo como devo proceder?

     

    Minha primeira ideia foi: Implementar um atributo do tipo string que representa essa mensagem de notificação e associa-lo a VIEW via binding, porem não sei se essa é a melhor prática para resolver esse problema.

     

    Agradeco uma resposta rapida!


    Tiago Carmo Santos
    quarta-feira, 10 de agosto de 2011 20:35

Respostas

  • Tiago,

    Depende de que maneira você queira exibir essa mensagem. Será em um controle da View (Label, TextBlock)? Ou será um MessageBox?

    E acho que você está esquecendo da ViewModel. Ao meu ver, ela será responsável por receber o retorno do Model e exibir na View.

    []'s

    Edegilson S. Silva

    sexta-feira, 12 de agosto de 2011 14:25
  • Tiago,

    caso esteja utilizando MVVM Light ToolKit, existe um objeto chamado Messenger, segue um exemplo de como ficaria o código:

    View:

    Page_Load
    {
    Messenger.Default.Register<NotificationMessage>(this, NotificationMessageReceived);
    }

    private void NotificationMessageReceived(NotificationMessage msg)
            {
                if (msg.Notification == "OK")
                {
                    App.UsuarioLogado = viewModel.UsuarioLogado;

                    RegistrarListener();

                    NavigationService.Navigate(new PaginaPrincipal());
                }
                else
                {
                    MessageBox.Show("Usuário ou Senha inválidos.", "Mensagem", MessageBoxButton.OK, MessageBoxImage.Exclamation);

                }
            }



    ViewModel:

    public void Logar()
            {
                UsuarioBLL usuarioBLL = new UsuarioBLL();

                UsuarioLogado = usuarioBLL.AcessarSistema(Login, Senha);

                if (UsuarioLogado.IDUsuario > 0)
                {
                    Messenger.Default.Send(new NotificationMessage("OK"));
                }
                else
                {
                    Messenger.Default.Send(new NotificationMessage("Nao"));
                }
            }
    Daniel Benevides
    • Sugerido como Resposta hamiltonj quarta-feira, 19 de outubro de 2011 12:44
    • Marcado como Resposta AndreAlvesLimaModerator segunda-feira, 9 de janeiro de 2012 21:27
    segunda-feira, 17 de outubro de 2011 11:26

Todas as Respostas

  • Tiago,

    Depende de que maneira você queira exibir essa mensagem. Será em um controle da View (Label, TextBlock)? Ou será um MessageBox?

    E acho que você está esquecendo da ViewModel. Ao meu ver, ela será responsável por receber o retorno do Model e exibir na View.

    []'s

    Edegilson S. Silva

    sexta-feira, 12 de agosto de 2011 14:25
  • Tiago,

    caso esteja utilizando MVVM Light ToolKit, existe um objeto chamado Messenger, segue um exemplo de como ficaria o código:

    View:

    Page_Load
    {
    Messenger.Default.Register<NotificationMessage>(this, NotificationMessageReceived);
    }

    private void NotificationMessageReceived(NotificationMessage msg)
            {
                if (msg.Notification == "OK")
                {
                    App.UsuarioLogado = viewModel.UsuarioLogado;

                    RegistrarListener();

                    NavigationService.Navigate(new PaginaPrincipal());
                }
                else
                {
                    MessageBox.Show("Usuário ou Senha inválidos.", "Mensagem", MessageBoxButton.OK, MessageBoxImage.Exclamation);

                }
            }



    ViewModel:

    public void Logar()
            {
                UsuarioBLL usuarioBLL = new UsuarioBLL();

                UsuarioLogado = usuarioBLL.AcessarSistema(Login, Senha);

                if (UsuarioLogado.IDUsuario > 0)
                {
                    Messenger.Default.Send(new NotificationMessage("OK"));
                }
                else
                {
                    Messenger.Default.Send(new NotificationMessage("Nao"));
                }
            }
    Daniel Benevides
    • Sugerido como Resposta hamiltonj quarta-feira, 19 de outubro de 2011 12:44
    • Marcado como Resposta AndreAlvesLimaModerator segunda-feira, 9 de janeiro de 2012 21:27
    segunda-feira, 17 de outubro de 2011 11:26