Domanda

Sto cercando di capire l'approccio di base di progettazione MVVM quando si utilizza ItemsControl legandosi tramite DataTemplates a ObservableCollections sul ViewModel.

Ho visto esempi che si legano a ObservableCollections di stringhe , Visualizzazioni e ViewModels .

Il legame con le stringhe sembra essere solo per demo , è il legame a " ViewModels che contengono collezioni di viste che contengono collezioni di ViewModels " che il potere di WPF sembra venire veramente fuori.

Per quelli di uso competente nel modello MVVM, qual è il tuo approccio standard al legame ItemsControl, ListView, ListBox a collezioni in un ViewModel Sto cercando consigli da un'esperienza come questa:

  • utilizzare sempre ObservableCollection <...> e mai List <...> perché ...
  • qualcosa di meglio di ItemsControl per visualizzare una collezione è ...
  • Al fine di ottenere il filtraggio a lavorare nel vostro ViewModel, invece di code-behind, uso ...
  • collezioni uso di Vista quando ... e le collezioni di ViewModels quando ...
  • 90% del tempo creo un ItemsControl e associarlo a un ObservableCollection di Vista, che hanno le loro ViewModels ...
È stato utile?

Soluzione

Vorrei usare un ObservableCollection di ViewModels per i seguenti motivi:

  • ObservableCollection trovi già disponibili eventi di segnalazione quando è stato modificato (ad esempio quando si aggiungono oggetti / rimosso dalla raccolta).
  • Siamo al 'layer' ViewModel in modo che fornisce la separazione più pulita per avere un ViewModel contiene una raccolta di ViewModels piuttosto che Visualizzazioni
  • Se è necessario modificare o ottenere dati da elementi all'interno della collezione è più facile modificare / accesso che i dati se gli elementi sono ViewModels (se sono viste sarete spesso verrà casting del View DataContext o accedendo alla sua interfaccia utente elementi).

Altri suggerimenti

Mi piace usare un ObservableCollection di ViewModel. La vista che si lega alla raccolta può definire un DataTemplate che dà il ViewModel il suo aspetto. Questo porta a meno accoppiamento tra i componenti.

Ho la stessa domanda, ma sostituire la "vista" con "modello". :)

Ho un modello con una collezione di altri modelli. Voglio che il mio ViewModel ad avere una collezione di altri osservabile ViewModels, ma una volta che un'istanza del genere - è perso la connessione tra il contenuto di raccolta modello. Ho quindi necessario avviare il cablaggio tutti gli eventi dalla raccolta osservabile ViewModels torna alla collezione modelli?

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top