我谈到约什史密斯的文章。
任何人都可以告诉我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设置,那么为什么绑定工作呢?
答案 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可作为我们应用程序的起点。