4

Resource を作成するときは、その中に 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 の 1 つをガベージ値 (View-Model には存在しない) にバインドしようとしましたが、正常に動作します!

4

1 に答える 1

12

は暗黙的なアプリケーション用です。たとえばDataType、 を削除するx:Keyと、参照する必要はありません。ドキュメントItemsControl.ItemTemplateを読んでください。

このプロパティは、 StyleクラスのTargetTypeプロパティに非常に似ています。x:Keyを指定せずにこのプロパティをデータ型に設定すると、DataTemplateがその型のデータ オブジェクトに自動的に適用されます。これを行うと、x:Keyが暗黙的に設定されることに注意してください。したがって、このDataTemplatex:Key値を割り当てると、暗黙的なx:Keyが上書きされ、DataTemplateは自動的に適用されません。

于 2012-07-11T13:35:42.420 に答える