Domanda

In MVVM, ogni vista ha un ViewModel. Una vista che intendo essere una finestra, pagina o controllo utente a cui puoi allegare un ViewModel da cui la vista ottiene i suoi dati.

Ma un DataTemplate può anche rendere i dati di un ViewModel.

Quindi capisco che un DataTemplate è un altro " Visualizza " ;, ma sembrano esserci differenze , ad es. Windows, Pages e UserControls possono definire i propri .dlls, un tipo è associato a DataContect l'altro attraverso il collegamento di un modello in modo che Windows, Pages, UserControls possano essere collegati dinamicamente a ViewModels da un ServiceLocator / Container , ecc.

In quale altro modo i DataTemplates sono diversi dai controlli Windows / Pages / UserControl quando si tratta di rendere i dati di un ViewModel sull'interfaccia utente? E ci sono altri tipi di " Viste " diverso da questi quattro?

È stato utile?

Soluzione

Il modo in cui lo uso, DataTemplate è in realtà il modo di collegare la vista al ViewModel. In genere i miei modelli di dati in MVVM sembrano così:

<DataTemplate DataType="{x:Type vm:FooViewModel}">
    <v:FooView />
</DataTemplate>

Altri suggerimenti

Ciò che ha più senso per me a questo punto nel passaggio a MVVM è:

UserControls: raggruppa viste e controlli che hanno lo scopo di eseguire un intero processo per l'utente. Uso un controllo utente per un cassetto scorrevole che ho creato che consente a un utente di scorrere diverse classificazioni delle parti (in cui ciascuna categoria di parti principali indirizza l'utente attraverso il proprio processo di selezione / procedura guidata). Guarda anche i controlli grafici.

Visualizzazioni: fondamentalmente una griglia che raggruppa i dati correlati e i controlli che popolano i dati desiderati al livello più piccolo in modo che possano essere riutilizzati.

Modelli di dati: raggruppa i fatti relativi a " articoli " come in una casella di riepilogo o GridView. Penso a questo come al modo in cui il testo rappresenta un oggetto di cui stai cercando di ottenere informazioni in un elenco. Quindi un modello di controllo dovrebbe avvolgere i blocchi del modello di dati per controllare il comportamento di visualizzazione di quella raccolta di elementi avvolti nel modello di dati.

Ecco come lo capisco, ma i confini sono molto sfocati. Mi piace il libro Apress Pro Expression Blend 4 di Andrew Troelson. Tuttavia, in realtà non fornisce alcun esempio di dati.

Non consiglierei di usare un DataTemplate per associare la vista al viewmodel. Attualmente sto riscontrando problemi di prestazioni utilizzando questo approccio poiché la vista viene aggiornata ogni volta che la vista viene messa a fuoco. Come puoi vedere qui e qui

Purtroppo non ho ancora trovato un'opzione migliore.

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