为什么要使用DataTemplate.DataType
问题描述:
当我创建一个资源,我们指定它里面的数据类型:为什么要使用DataTemplate.DataType
<Window.Resources>
<DataTemplate x:Key="StudentView"
DataType="this:StudentData">
<TextBox Text="{Binding Path=StudentFirstName, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}"
Grid.Row="1"
Grid.Column="2"
VerticalAlignment="Center" />
<TextBox Text="{Binding Path=StudentGradePointAverage}"
Grid.Row="2"
Grid.Column="2"
VerticalAlignment="Center" />
</DataTemplate>
<Window.Resources>
虽然结合:
<ItemsControl ItemsSource="{Binding TheStudents}"
ItemTemplate="{StaticResource StudentView}">
那么,为什么我们使用的数据类型,即使我删除DatType,我的示例运行良好。是否限制某些类型,可以在DataTemplete中?
但我试图绑定一个TextBox与垃圾值(不存在的视图模型),它工作正常!
答
DataType
用于隐式应用,例如,如果删除x:Key
,则不需要在ItemsControl.ItemTemplate
中引用它。阅读the documentation。
该属性与Style类的TargetType属性非常相似。当您将此属性设置为数据类型而未指定x:键时,DataTemplate会自动应用于该类型的数据对象。请注意,当您这样做时,隐式设置x:Key。因此,如果将此DataTemplate一个x:Key值分配给您,则您将覆盖隐含的x:将不会自动应用密钥和DataTemplate。
一个优点是知道预期的数据上下文类型允许对绑定路径是否有效进行静态验证。这也是未来开发者对DataTemplate意图的文档暗示。 – 2012-07-11 14:24:04