2012-07-11 106 views
4

當我創建一個資源,我們指定它裏面的數據類型:爲什麼要使用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與垃圾值(不存在的視圖模型),它工作正常!

+0

一個優點是知道預期的數據上下文類型允許對綁定路徑是否有效進行靜態驗證。這也是未來開發者對DataTemplate意圖的文檔暗示。 – 2012-07-11 14:24:04

回答

12

DataType用於隱式應用,例如,如果刪除x:Key,則不需要在ItemsControl.ItemTemplate中引用它。閱讀the documentation

該屬性與Style類的TargetType屬性非常相似。當您將此屬性設置爲數據類型而未指定x:鍵時,DataTemplate會自動應用於該類型的數據對象。請注意,當您這樣做時,隱式設置x:Key。因此,如果將此DataTemplate一個x:Key值分配給您,則您將覆蓋隱含的x:將不會自動應用密鑰DataTemplate