Pergunta

Estou construindo um aplicativo WPF e tentando estar em conformidade com as melhores práticas da MVVM. Estou usando o Fundação MVVM estrutura e notei o Mensageiro aula, que eu li deve ser usada para Diálogos de manuseio no WPF. Isso parece ótimo, mas não estou totalmente entendendo como usar um mensageiro para esse fim. Literalmente, tudo o que quero fazer é abrir um modal sobre diálogo -não preciso passar nenhuma mensagem.

A intenção da classe Messenger era usada para casos em que as diálogos exigiam uma mensagem de seus pais ou devolva uma mensagem aos pais? É um exagero para uma caixa de diálogo sobre? Eu seria melhor simplesmente adicionar código a um manipulador de eventos para mostrar a caixa de diálogo?

Foi útil?

Solução

A idéia por trás do padrão de mensagens não tem nada a ver com mostrar diálogos. A idéia é simplesmente fornecer uma maneira dissociada de se comunicar entre os modelos ViewModels.

Você pode aproveitar essa infraestrutura para resolver seu problema, mas você mesmo precisará implementar a exibição do diálogo.

Como Phillip mostrou acima, você pode enviar mensagens entre o ViewModels. Quando o seu ViewModel recebe a mensagem, ele pode definir sua própria propriedade interna, digamos "ShowDialog", para true.

Você pode ter uma ligação que reage a essa operação de mudança de propriedade e abre uma caixa de diálogo.

Eu também construí uma estrutura de mensagens simples para o padrão MVVM que empresta da idéia de Josh (e várias outras estruturas existentes) que você pode ler sobre isso aqui

Outras dicas

Digamos que você tenha uma visão dos pais e uma visualização de diálogo. No MVVM, ambos teriam um modelo de visualização. É bom manter esses modelos de exibição dissociados, ou seja, eles não têm referências um ao outro. E, no entanto, eles precisam se comunicar. A classe Messenger atua como uma entrada entre ou mediadora para mediar a comunicação de informações entre as duas classes. Veja o código tirado de Blog de Josh.

alt text

Aqui está o objeto A. É chamado para o método do registro do mediador implementa: Quando eu recebo a mensagem ObjectBSaidSomething, do mediador, eu o cache no membro WhatObjectBrays.

alt text

Aqui está o objeto B, que implementa: vou enviar uma mensagem objectbSaidsomething. Observe que o objeto B não sabe nada sobre o objeto A. Pode não haver nada ouvindo para objeto, algo, ou 100 objetos ouvindo objectBSaidsomething, mas o objeto B não sabe e não se importa. Isso é um bom desacoplamento, e é por isso que o padrão do mediador é uma boa ideia. E é assim que a fundação MVVM recomenda que as informações sejam passadas entre os modelos de exibição.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top