Pergunta

Eu tenho mexido com o padrão MVVM e agora estou tentando implementar um pouco de aplicativo com base nele.

Este aplicativo possui um datagrid no qual, surpreendentemente, alguns dados são apresentados. Agora estou tentando adicionar alguma capacidade de agrupamento a isso. Eu sei como escrever isso no código (c# e xaml), mas estou me perguntando em que camada devo colocar o código responsável.

Uma parte de mim me diz que deveria estar na opinião, porque é um código especialmente para essa visão específica. Não é genérico e serve um Purpos: agrupar os dados.

Por outro lado, acho que devo lidar com isso no ViewModel usando um comando. Parece, porém, como se eu estivesse contaminando meu viewmodel com a lógica específica do View.

Algum ligt que pode ser derramado sobre isso?

Foi útil?

Solução

Na maioria dos meus aplicativos MVVM, tento dividir responsabilidades como esta:

  • A visualização deve apenas executar uma tradução simples dos dados do ViewModel em pixels. Geralmente, isso resulta principalmente em XAML e muito pouco código.
  • O ViewModel deve executar a lógica específica da visão, como agrupamento etc. Muitas vezes tenho vários modelos de exibição por visualização. Você pode ter um model de exibição principal que expõe uma lista de sub-viewmodels por grupo à sua visualização, por exemplo, para implementar o agrupamento.
  • Se você tiver alguma lógica que se aplique a mais de um viewmodel, provavelmente é a lógica do domínio e deve entrar no modelo de domínio.

Então eu acho que o agrupamento deve ir no ViewModel.

Outras dicas

Não há uma resposta para isso. Realmente depende do seu cenário:

1) O usuário tem alguma influência sobre o assunto? Se não o fizerem, e é um agrupamento fixo, eu publicaria uma propriedade com iGrouping e usaria o DataService ou o LINQ para fazê -lo antes de entrar na visualização.

Normalmente, é menos executado se você fizer agrupamento na visualização, mas não é uma opção clara. Se o usuário puder selecionar muitos agrupamentos diferentes, isso pode ser uma penalidade que vale a pena pagar pela usabilidade adicional.

Se o usuário tiver alguma influência no agrupamento, eu vieria a um ICOLLECTIONVIEW exposto pelo ViewModel. A exibição suporta agrupamento, filtragem, classificação e moeda e a interface ICOLLECTIONVIEW é do System.comPonsModel, para que você não precise adicionar uma referência "GUI" ao seu projeto ViewModel. Além disso, o WPF Datagrid suporta a interface ICOLLECTIONVIEW.

Se o usuário não influenciar o agrupamento (os grupos são fixos), apenas "pré" agrupará os dados no modelo. Hth.

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