Pergunta

Sobre a questão StackOverflow Como pode WPF Conversores ser usado em um padrão MVVM? Eu aprendi que Valor conversores não deve ser usado no padrão MVVM desde o funcionalidade de um conversor de valor deve ser tratado pelo -se ViewModel .

Isso faz sentido.

Mas eu lembro de ter lido que você deve Não exponha elementos XAML para a exibição , mas sim expor apenas coleções de dados que a vista em seguida, se liga e exibe usando DataTemplates.

No entanto, conversores parecem bastante poderosa (por exemplo, como eles são usados ??no Template MVVM demonstração , consulte o "Mensageiro Sample" após descompactá-lo) em que que pode converter objetos para objetos , por exemplo, Objetos de mensagem para FlowDocument objetos, ou objetos do cliente em objetos Visibilidade ou Status objetos personalizados em imagens, etc.

Portanto, se um ViewModel vai assumir a funcionalidade de um conversor de valor , ele vai ter de expor elementos XAML e propriedades tais como StackPanel, visibilidade, cores, FlowDocument, etc., certo?

Alguém vê qualquer razão para que um ViewModel não deve expor esses ricos objetos XAML como Valor Conversores fazer?

Foi útil?

Solução

Porque então que os limites ViewModel para ser utilizado apenas com uma representação visual específico. Assim que tiver o ViewModel emissor de XAML, coloca conteúdo de design para o domínio de um desenvolvedor. Isto significa que o designer usando Expression Blend pode não ativos edição de design - e o fluxo de trabalho designer / programador está quebrado. Mantendo o XAML na página e usando conversores Valor com modelagem de dados mantém o design separado do código.

Quando seu ViewModel expõe XAML específica também limita que ViewModel para ser usado apenas nessa instância específica e torna menos reutilizável.

Outras dicas

Não se esqueça que você pode usar DataTemplates também. Eu posso ver algum sentido em manter ValueConverters fora de MVVM, mas DataTemplates são todos sobre a transformação de objetos em GUI.

Seu ViewModel pode expor outros objetos (por exemplo viewmodels aninhados) à GUI, ea GUI pode usar <DataTemplate DataType="{x:Type SubViewModel}">... para mapear esses objetos para GUI.

Alguém vê qualquer razão para que um ViewModel não deve expor esses ricos objetos XAML como Valor Conversores fazer?

Com certeza, porque isso prejudica todos os objetivos de MVVM:

  1. Você não é testável unidade mais tempo, pelo menos não com facilidade.
  2. Você não tem mais separação entre a lógica (vista do modelo) e apresentação (view). Assim, os designers e desenvolvedores não podem colaborar facilmente.
  3. manutenção do código é mais difícil porque você misturou as preocupações juntos.

Se eu visse um modelo de vista retornando uma visão, eu nem classificá-lo como MVVM.

Eu acho que uma idéia de mvvm / MVC / MVP etc. é isolar o código GUI para um arquivo / classe. Se você fizer isso você pode mudar para algum outro UI sem reescrever os outros objetos? Eu acho que se você está passando em torno WPF específicos objetos a resposta é não. É um juízo de valor que você terá que fazer para o seu self.

Não existe uma regra absoluta de 100% que trabalha para este ou muitos outros conceitos quando você discuti-los sem a perspectiva de por que a mente da comunidade mudou, pois tem nessa direção. Não existe 'assumido' verdade ou ciência na 'sabedoria convencional', independentemente de como novo ou atraente é no momento.

Em outras palavras -. Apenas fazer o melhor com sua equipe como se o seu bom, o seu já está sendo puxado para baixo muito mais nas preocupações humanas do que qualquer coisa tão real como este

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