我们为什么要使用DataTemplate.DataType

时间:2012-07-11 13:32:12

标签: wpf xaml 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}">

那么为什么我们使用DataType,即使我删除了DatType,我的样本运行正常。是否限制某些类型,可以在DataTemplete中?

但我尝试将其中一个TextBox与垃圾值绑定(View-Model中不存在),它运行正常!

1 个答案:

答案 0 :(得分:12)

DataType用于隐式应用,如果您放弃x:Key,则不需要在ItemsControl.ItemTemplate中引用它。阅读the documentation

  

此属性与TargetType类的Style属性非常相似。如果将此属性设置为数据类型而未指定 x:Key ,则DataTemplate会自动应用于该类型的数据对象。请注意,当您这样做时,隐式设置 x:Key 。因此,如果您为此DataTemplate分配 x:Key 值,则会覆盖隐式 x:Key ,并且不会应用DataTemplate自动。