Die DataContext
eines FrameworkElement
ist, was das Element gebunden ist. Es ist grundsätzlich vom Typ object
. Im MVVM-Muster ist dies meistens das ViewModel-Objekt, muss aber nicht. Es sind einfach einige Kontextinformationen, die Sie auf diese FrameworkElement
anwenden möchten. Es wirkt sich nicht direkt auf die visuelle Darstellung aus.
Wenn WPF will einiges Objekt anzuzeigen, die seine eigene visuelle Darstellung nicht über (zB nicht von UIElement
abstammen, wird es sehen, ob eine entsprechendes DataTemplate
wie zu definieren existiert soll, dass die Daten vor. In Ihrem So haben Sie gesagt, dass die UserViewModel
Klasse sollte die UserView
Steuerung mit präsentiert werden, aber Sie haben nicht wirklich erstellt entweder die UserViewModel
oder UserView
.
Diese beiden Konzepte gehen oft zusammen. Zum Beispiel stellen Sie sich eine ObservableCollection<object>
hatte, die hatte darin ein Foo
und ein Bar
Objekt.Sie könnten verschiedenedefinierens für Foo
und Bar
. Dann könnten Sie Ihre Sammlung in eine ItemsControl
binden. Jedes Objekt in dem Steuerelement würde eine visuelle Darstellung basierend auf dem entsprechenden DataTemplate
von seinem Typ erhalten.
Ein weiteres einfaches Beispiel: Wenn Sie eine Eigenschaft auf Ihrem Viewmodel DisplayObject
und Sie einfach benannt haben wollen, dass es mit erscheinen, was auch immer DataTemplate
Sie definiert haben, können Sie die ContentPresenter
Steuerung verwenden:
<ContentPresenter DataContext="{Binding DisplayObject}"/>
Auch diese Ergebnisse Suchen Sie in WPF die richtige Vorlage für den Typ und verwenden Sie diese, um eine Darstellung zu erstellen.
Hallo Peter, Ben Danke an euch alle für die Antwort. Ich frage mich, ob ich den Datenkontext und Datamaplate eines Steuerelements auf das gleiche Ansichtsmodell festlegen kann? –
@Ashish: Sie können den DataContext auf das ViewModel selbst setzen, aber Sie setzen das DataTemplate auf eine Vorlage, die * das ViewModel * anzeigt - nicht auf das ViewModel selbst. –