官方MSDN MVVM文章中CustomerViewModel的datacontext在哪里?

时间:2010-04-30 23:03:13

标签: wpf mvvm datacontext

我谈到约什史密斯的文章。

任何人都可以告诉我CustomerView.xaml具体如何:j

 <TextBox 
  x:Name="firstNameTxt"
  Grid.Row="2" Grid.Column="2" 
  Text="{Binding Path=FirstName, ValidatesOnDataErrors=True, UpdateSourceTrigger=PropertyChanged}" 
  Validation.ErrorTemplate="{x:Null}"
  />

为什么有一个绑定到FirstName,它是CustomerViewModel中的公共属性。

为MainViewModel设置了一个datacontext,但是没有为CustomerViewModel设置,那么为什么绑定工作呢?

1 个答案:

答案 0 :(得分:0)

查看MainWindowResources.xaml中的ResourceDictionary。 Josh使用以下代码来描述在主窗口中显示CustomerViewModel实例时应使用哪个View:

   <DataTemplate DataType="{x:Type vm:CustomerViewModel}">
        <vw:CustomerView />
   </DataTemplate>

我们已经描述过,当我们的DataType属于CustomerViewModel类型时,我们将创建一个CustomerView的新实例。 WPF在看到CustomerViewModel类型时负责DataContext和创建。

从文章的其余部分开始:

  

将视图应用于ViewModel   MainWindowViewModel间接添加   并删除Workspace ViewModel   来自主窗口的对象   标签控件。依靠数据   绑定,一个的Content属性   TabItem收到一个   ViewModelBase派生的对象   显示。 ViewModelBase不是UI   元素,所以它没有固有的支持   用于渲染自己。默认情况下,在   WPF是一个非可视对象   显示呼叫结果   TextBlock中的ToString方法。   这显然不是你需要的,   除非您的用户有刻录   希望看到我们的类型名称   ViewModel类!你可以轻松告诉   WPF如何呈现ViewModel对象   通过使用类型化DataTemplates。打字   DataTemplate没有x:Key   分配给它的值,但确实有   它的DataType属性设置为   Type类的实例。如果是WPF   尝试渲染一个ViewModel   对象,它会检查是否   资源系统有一个打字   DataTemplate的范围是DataType   与(或基类)相同   ViewModel对象的类型。如果   它找到一个,它使用该模板   呈现引用的ViewModel对象   由标签项的内容属性。   MainWindowResources.xaml文件有   资源字典。那本字典   被添加到主窗口的资源中   层次结构,这意味着   它包含的资源在   窗口的资源范围。当一个标签   item的内容设置为ViewModel   object,这是一个类型化的DataTemplate   字典提供一个视图(即,一个   用户控件)渲染它,如图所示   在图10中。

App.xaml.cs中MainViewModel的DataContext可作为我们应用程序的起点。