Meu ViewModel ter uma ObservableCollection de pontos de Vista ou ViewModels?
-
12-09-2019 - |
Pergunta
Estou tentando entender o básico MVVM abordagem de design quando utilizar ItemsControl ao ligar via DataTemplates para ObservableCollections sobre o ViewModel.
Eu já vi exemplos que se ligam a ObservableCollections de cadeias de caracteres, Pontos de vista, e ViewModels.
Ligação para cadeias parece ser apenas para demos, é obrigatório para "ViewModels que contêm coleções de pontos de Vista que contêm coleções de ViewModels"que o poder do WPF parece realmente sair.
Para aqueles de uso proficiente no padrão MVVM, qual é a sua abordagem padrão para ligação de ItemsControl, ListView, caixa de Listagem para coleções em um ViewModel? Eu estou olhando para o conselho de experiência como esta:
- use sempre ObservableCollection<...> e nunca Lista<...> porque...
- algo melhor do que ItemsControl para apresentar uma colecção de...
- a fim de obter a filtragem para trabalhar no seu ViewModel em vez de code-behind, use...
- usar conjuntos de pontos de Vista quando ...e as coleções de ViewModels quando...
- 90% do tempo eu criar um ItemsControl e vinculá-lo a uma ObservableCollection de pontos de Vista que têm as suas próprias ViewModels...
Solução
Eu usaria uma observação da ViewModels pelos seguintes motivos:
- O ObservableCollection já possui eventos disponíveis para sinalização quando foi modificado (por exemplo, quando os itens são adicionados/removidos da coleção).
- Estamos na 'camada' do ViewModel, por isso fornece uma separação mais limpa para que um viewmodel contenha uma coleção de models de vista em vez de visualizações
- Se for necessário modificar ou obter dados de itens dentro da coleção, você poderá modificar/acessar mais facilmente esses dados se os itens forem modelos de exibição (se eles forem visualizações, você frequentemente lançará o datacontext da exibição ou acessando seus elementos da interface do usuário).
Outras dicas
Gosto de usar uma observação de viewmodels. A visualização que se liga à coleção pode definir um datatemplate que dá ao ViewModel sua aparência. Isso leva a menos acoplamento entre os componentes.
Eu tenho a mesma pergunta, mas substitua o "vista" com o "modelo".:)
Eu tenho um MODELO com um conjunto de outros modelos.Eu quero o meu viewmodel para ter uma coleção observável de outros viewmodels, mas uma vez eu instanciá-lo como a conexão entre o modelo de recolha de conteúdo é perdido.Faça agora eu preciso para começar a fiação todos os eventos da viewmodels observáveis coleção de volta para os modelos da coleção?