当我创建资源时,我们在其中指定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}">
那么为什么我们使用DataType,即使我删除了DatType,我的样本运行正常。是否限制某些类型,可以在DataTemplete中?
但我尝试将其中一个TextBox与垃圾值绑定(View-Model中不存在),它运行正常!
答案 0 :(得分:12)
DataType
用于隐式应用,如果您放弃x:Key
,则不需要在ItemsControl.ItemTemplate
中引用它。阅读the documentation。
此属性与TargetType类的Style属性非常相似。如果将此属性设置为数据类型而未指定 x:Key ,则DataTemplate会自动应用于该类型的数据对象。请注意,当您这样做时,隐式设置 x:Key 。因此,如果您为此DataTemplate分配 x:Key 值,则会覆盖隐式 x:Key ,并且不会应用DataTemplate自动。