Personalmente vedo MVVM non come un vantaggio, ma come un obbligo per coloro che desiderano utilizzare le funzionalità di WPF.
WPF è molto molto pesantemente costruito con l'associazione dati al centro, per consentire la separazione dell'interfaccia utente dal modello. Ma il modo vincolante tecnicamente fatto in WPF dati è un po 'speciale, come è legato alle classi come:
- DependencyProperty
- INotifyPropertyChanged
- ObservableCollection
A causa di questo proprio non posso scrivi davvero un modello nel modo che desideri utilizzando la tecnologia .NET standard. Ad esempio, WPF TreeView è quasi impossibile da usare senza utilizzare associazione dati e modelli. Ad esempio, non puoi popolarlo semplicemente come faresti da un modello generico in Winforms. È deve essere associato a un modello gerarchico utilizzando ObservableCollection per rappresentare i figli di un nodo.
Quindi diciamo che V rappresenta il codice XAML ed è controparte code-behind (quindi è legato a WPF come tecnologia), e diciamo che M rappresenta il modello (quindi non è legato alla tecnologia UI WPF in ogni caso).
Beh, non dovrete mai questo lavoro correttamente in WPF con solo questi V & M.
È necessario aggiungere qualcosa tra i due. Qualcosa che sia compatibile con WPF e capisca il tuo modello. Qualcosa che parla DependencyProperty, ObservableCollection e INotifyPropertyChanged. Questo è ciò che si chiama VM.
Come nota a margine, un'alternativa a MVVM consiste nel creare una combinazione V & M (senza VM) con M che sia compatibile con WPF ma con una ragionevole indipendenza dell'interfaccia utente. Storicamente, ObservableCollection era nell'assembly WindowsBase.dll (fornito con WPF), quindi sembrava davvero strano associare un modello generico a qualcosa di legato a una tecnologia dell'interfaccia utente. È stato spostato di nuovo in System.dll da allora. Anche in questo caso, a volte è difficile mantenere un modello VM puro senza ottimizzare la M in modo specifico per WPF ...
fonte
2016-01-03 08:18:03
Ho sempre considerato MVVM come una variazione di MVC. –