与wpfmvvm的混淆

与wpfmvvm的混淆,wpf,mvvm,Wpf,Mvvm,我已经从CodePlex下载了关于MVVM的文档,但是我不理解这个图 在文档中,ContactView从未将其DataContext设置为ContactViewModel,因此我不理解为什么此图显示ContactView通过DataContext引用ContactViewModel 我不知道它是何时设置ContactView.DataContext的,或者文档是否缺少这一点?如果联系人显示在列表视图或类似内容中,则可能不需要专门设置DataContext 如果将listview的datacon

我已经从CodePlex下载了关于MVVM的文档,但是我不理解这个图

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


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

如果联系人显示在列表视图或类似内容中,则可能不需要专门设置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对象,所有这些都发生在幕后,而无需您自己实际设置属性。

您应该阅读Josh Smith的文章,之后一切都会变得更加清晰……本文(最初由@Thomas Levesque发布)似乎对OP有帮助: