我从CodePlex下载了有关MVVM的文档,但我不明白这个图。
alt text http://img194.imageshack.us/img194/3959/diagram.png
在文档中,ContactView从未将其DataContext设置为ContactViewModel,因此我不明白为什么此图表显示ContactView通过DataContext引用ContactViewModel。
我不知道它什么时候设置ContactView.DataContext,或者文档是否缺少这一点?
答案 0 :(得分:2)
你应该阅读Josh Smith的this article,事后看来会更清楚......
答案 1 :(得分:1)
如果联系人在列表视图或类似内容中显示,则可能无需专门设置DataContext。
如果listview的datacontext设置为MainViewModel的Contacts属性,那么每个项目的datacontext将自动设置为特定的ContactViewModel对象,这可能触发使用ContactView控件呈现的项目,假设某些模板绑定是在文档的前面设置的。
抱歉,我遇到了codeplex的问题,只是设法让文档下载。图表前面的代码块证实了我的怀疑:
<Grid>
<ListBox ItemsSource="{Binding Contacts}">
<ListBox.ItemTemplate>
<DataTemplate>
<views:ContactView />
</DataTemplate>
</ListBox.ItemTemplate>
</ListBox>
</Grid>
由于ListBox绑定了Contacts ObservableCollection,因此每个ListItem都将其DataContext设置为绑定到的特定对象。 DataTemplate设置为将每个项目显示为ContactView控件。因此,ContactView的DataContext将被设置为集合中的正确Contact对象,所有这些都发生在幕后,而无需您自己实际设置属性。