与WPF MVVM混淆

时间:2009-05-15 08:15:15

标签: wpf mvvm

我从CodePlex下载了有关MVVM的文档,但我不明白这个图。

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

在文档中,ContactView从未将其DataContext设置为ContactViewModel,因此我不明白为什么此图表显示ContactView通过DataContext引用ContactViewModel。

我不知道它什么时候设置ContactView.DataContext,或者文档是否缺少这一点?

2 个答案:

答案 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对象,所有这些都发生在幕后,而无需您自己实际设置属性。