2013-05-15 11 views
8

Qual è la soluzione migliore per contenere i miei dati o dipende da alcune condizioni?Best Practice Observablecollection <Model> vs Observablecollection <ViewModel>

situazione campione 1:
è necessario per visualizzare un elenco di dati che possono essere modificati in una nuova finestra dopo la selezione.

situazione campione 2:
è necessario per visualizzare un elenco di dati che possono essere modificati in questa lista.

risposta

10

Come si utilizza MVVM, si dovrebbe andare con ObservableCollection<ViewModel>.

Il modello deve essere separato dalla vista tramite ViewModel.

+3

sicuro, ma "ObservableCollection <>" è già in un 'ViewModel', quindi è già separato dal' Vista' o mi manca qualcosa? – WiiMaxx

+1

@WiiMaxx Non è realmente separato, poiché stai ancora usando la classe nella vista. – mattytommo

+0

Oh buona obiezione. Quindi non sarà un overhead creare 2 oggetti Model-> ViewModel per un oggetto che forse non è mai stato utilizzato dall'utente – WiiMaxx

-1

Direi andare con ObservableCollection<Model> poiché è qualcosa che è possibile associare direttamente all'Elenco o al datagrid.

Per esempio Situazione 1: selezionare un modello e quindi impostare il contesto dati della nuova finestra su quel modello.

Per esempio Situazione 2: Modifica sul posto del datagrid con rilegatura a 2 vie.

ObservableCollection può essere all'interno di un ViewModel. Qualcosa come quello mostrato di seguito.

public class MyViewModel 
{ 
    public ObservableCollection<Model> ListOfItems { get; set;} 
} 
+0

come mattytommo dice già che il 'View' deve essere separato dal modello, quindi sarebbe più come selezionare un' Modello' creare un 'ViewModel', dargli il modello e impostare' ViewModel' come 'DataContext' – WiiMaxx

+0

Vorrei continuare con l'implementazione di cui sopra poiché significherebbe che dobbiamo implementare INotifyPropertyChanged nella classe Model. Ciò renderebbe più facile l'associazione alla vista. Dai un'occhiata a questa discussione: http://stackoverflow.com/questions/6922130/in-mvvm-model-should-the-model-implement-inotifypropertychanged-interface – cvraman

Problemi correlati