2009-05-15 19 views
0

Ich habe das Dokument über MVVM aus CodePlex heruntergeladen, aber ich verstehe dieses Diagramm nicht.Verwechslung mit WPF MVVM

alt text http://img194.imageshack.us/img194/3959/diagram.png

In dem Dokument Contact setzt nie seine Datacontext ContactViewModel, so dass ich nicht verstehen, warum dieses Diagramm gezeigt hat, dass Contact auf ContactViewModel über Datacontext verweist.

Ich weiß nicht, wann es ContactView.DataContext setzt, oder fehlt das Dokument diesen Punkt?

Antwort

2

Sie sollten this article von Josh Smith, alles wird offenbar viel klarer danach ...

1

Es kann nicht brauchen, um spezifisch die Datacontext gesetzt, wenn die Kontakte in einer Listenansicht oder etwas gezeigt werden ähnlich lesen.

Wenn der Datacontext der ListView auf die Contacts-Eigenschaft des MainViewModel festgelegt ist, wird der Datenkontext jedes Elements automatisch auf das spezifische ContactViewModel-Objekt festgelegt, wodurch die Elemente mithilfe eines ContactView-Steuerelements ausgelöst werden können Vorlagenbindungen wurden früher im Dokument eingerichtet.


Entschuldigung, ich hatte Probleme mit Codeplex und habe gerade erst das Dokument zum Download bekommen. Der Code-Block unmittelbar vor dem Diagramm meinen Verdacht bestätigt:

<Grid> 
    <ListBox ItemsSource="{Binding Contacts}"> 
     <ListBox.ItemTemplate> 
      <DataTemplate> 
       <views:ContactView /> 
      </DataTemplate> 
     </ListBox.ItemTemplate> 
    </ListBox> 
</Grid> 

Da die List-Box, die die Kontakte gebunden ist ObservableCollection jeder ListItem seine Datacontext auf das spezifische Objekt festgelegt hat, dass es gebunden ist. Das DataTemplate ist so eingerichtet, dass jedes Element als ContactView-Steuerelement angezeigt wird. Daher wird der DataContext von ContactView auf das richtige Kontaktobjekt aus der Sammlung gesetzt. All dies geschieht im Hintergrund, ohne dass Sie die Eigenschaft selbst festlegen müssen.