DataTemplate クラス
定義
重要
一部の情報は、リリース前に大きく変更される可能性があるプレリリースされた製品に関するものです。 Microsoft は、ここに記載されている情報について、明示または黙示を問わず、一切保証しません。
データ オブジェクトのビジュアル構造を記述します。 データ値を表示するテンプレート内の特定の要素には、データ バインディングを使用します。
/// [Windows.Foundation.Metadata.ContractVersion(Microsoft.UI.Xaml.WinUIContract, 65536)]
/// [Windows.Foundation.Metadata.MarshalingBehavior(Windows.Foundation.Metadata.MarshalingType.Agile)]
/// [Windows.Foundation.Metadata.Threading(Windows.Foundation.Metadata.ThreadingModel.Both)]
class DataTemplate : FrameworkTemplate, IElementFactory
[Windows.Foundation.Metadata.ContractVersion(typeof(Microsoft.UI.Xaml.WinUIContract), 65536)]
[Windows.Foundation.Metadata.MarshalingBehavior(Windows.Foundation.Metadata.MarshalingType.Agile)]
[Windows.Foundation.Metadata.Threading(Windows.Foundation.Metadata.ThreadingModel.Both)]
public class DataTemplate : FrameworkTemplate, IElementFactory
Public Class DataTemplate
Inherits FrameworkTemplate
Implements IElementFactory
- 継承
- 属性
- 実装
例
次の例では、DataTemplate を使用して ListView の項目を表示します。 この例では、 ListView はオブジェクトの Customer
コレクションにバインドされています。 DataTemplate には、および Address
の各プロパティにバインドする TextBlock コントロールがFirstName
LastName
含まれています。 データ バインディングの詳細については、「データ バインディングの詳細」を参照してください。
<Grid>
<Grid.Resources>
<local:Customers x:Key="customers"/>
</Grid.Resources>
<ListView ItemsSource="{StaticResource customers}"
Width="350" Margin="0,4,0,8">
<ListView.ItemTemplate>
<DataTemplate x:DataType="local:Customer">
<StackPanel>
<StackPanel Orientation="Horizontal">
<TextBlock Text="{x:Bind LastName}"/>
<TextBlock Text="," Margin="0,0,2,0"/>
<TextBlock Text="{x:Bind FirstName}"/>
</StackPanel>
<TextBlock Text="{x:Bind Address}" Margin="8,0,0,2"/>
</StackPanel>
</DataTemplate>
</ListView.ItemTemplate>
</ListView>
</Grid>
public class Customer
{
public String FirstName { get; set; }
public String LastName { get; set; }
public String Address { get; set; }
public Customer(String firstName, String lastName, String address)
{
this.FirstName = firstName;
this.LastName = lastName;
this.Address = address;
}
}
public class Customers : ObservableCollection<Customer>
{
public Customers()
{
Add(new Customer("Michael", "Anderberg",
"12 North Third Street, Apartment 45"));
Add(new Customer("Chris", "Ashton",
"34 West Fifth Street, Apartment 67"));
Add(new Customer("Seo-yun", "Jun",
"56 East Seventh Street, Apartment 89"));
Add(new Customer("Guido", "Pica",
"78 South Ninth Street, Apartment 10"));
}
}
注釈
DataTemplate
オブジェクトは、次のプロパティの値として使用されます。
- ItemsControl.ItemTemplate (ListView、GridView、ListBox などのさまざまなアイテム コントロールによって継承されます)
- ContentControl.ContentTemplate ( Button、 Frame、 SettingsFlyout などのさまざまなコンテンツ コントロールによって継承されます)
-
HeaderTemplate
さまざまな項目コントロール クラスの プロパティとFooterTemplate
プロパティ - ItemsPresenter.HeaderTemplate と ItemsPresenter.FooterTemplate
-
HeaderTemplate
およびFooterTemplate
RichEditBox、TextBox などのテキスト コントロールのプロパティ -
HeaderTemplate
ComboBox、DatePicker、Hub、HubSection、Pivot、Slider、TimePicker、ToggleSwitch などのコントロールの プロパティ。これらの一部は、FooterTemplate
通常、DataTemplate を使用して、データの視覚的表現を指定します。 DataTemplate オブジェクトは、ListBox などの ItemsControl をコレクション全体にバインドする場合に特に便利です。 特定の命令がない場合、 ListBox はコレクション内のオブジェクトの文字列表現を表示します。 DataTemplate を使用して、各データ オブジェクトの外観を定義します。 DataTemplate の内容は、データ オブジェクトの視覚的な構造になります。
通常、DataTemplate ではデータ バインディングを使用します。 たとえば、 ListView がオブジェクトの Customer
コレクションにバインドされ、 ItemTemplate プロパティが DataTemplate に設定されるとします。
ListView が作成されると、コレクション内のそれぞれにCustomer
対して ListViewItem が作成され、ListViewItem の DataContext が適切な顧客に設定されます。 つまり、最初の ListViewItem の DataContext は最初の顧客に設定され、2 番目の ListViewItem の DataContext は 2 番目の顧客に設定されます。 DataTemplate 内の要素をバインドして、各オブジェクトから取得されるプロパティ値を Customer
表示できます。
DataTemplate を使用して、複数の ContentControl オブジェクト間で UIElement オブジェクトを共有することもできます。 たとえば、同じグラフィックを持つには、アプリケーションに複数のボタンが必要だとします。 グラフィックを含む DataTemplate を作成し、ボタンの ContentTemplate として使用できます。 ContentTemplate のデータ テンプレートでは、データ バインディングを使用することもできます。 ただし、この場合、データ コンテキストはテンプレートが適用されている要素と同じです。 通常、これは 1 つのデータ オブジェクトであり、項目の概念はありません。
DataTemplate は、XAML の ItemTemplate プロパティ要素の直接の子として配置できます。 これは インライン テンプレート として認識されるため、UI の他の領域に同じデータ テンプレートを使用する必要がない場合は、これを行います。 DataTemplate をリソースとして定義し、 ItemTemplate プロパティの値としてリソースを参照することもできます。 リソースになったら、データ テンプレートを必要とする複数の UI 要素に同じテンプレートを使用できます。 Application.Resources にデータ テンプレートを組み込む場合は、UI のさまざまなページで同じテンプレートを共有することもできます。
データ テンプレートの内容に対する XAML の使用は、設定可能なコード プロパティとして公開されません。 これは、DataTemplate の XAML 処理に組み込まれている特別な動作です。
高度なデータ バインディング シナリオでは、データのプロパティを使用して、UI 表現を生成する必要があるテンプレートを決定できます。 このシナリオでは、DataTemplateSelector を使用し、ItemTemplateSelector などのプロパティを設定してデータ ビューに割り当てることができます。 DataTemplateSelector は、自分で記述するロジック クラスです。このクラスには、データと対話する独自のロジックに基づいて、バインド エンジンに 1 つだけの DataTemplate を返すメソッドがあります。 詳しくは、「データ バインディングの詳細」をご覧ください。
XAML 添付プロパティ
DataTemplate は、 XAML 添付プロパティのホスト サービス クラスです。
添付プロパティへの XAML プロセッサ アクセスをサポートし、同等の get 操作と set 操作をコードに公開するために、各 XAML 添付プロパティには、Get および Set アクセサー メソッドのペアがあります。 コードで値を取得または設定するもう 1 つの方法は、依存関係プロパティ システムを使用して GetValue または SetValue を呼び出し、識別子フィールドを依存関係プロパティ識別子として渡すことです。
添付プロパティ | 説明 |
---|---|
ExtensionInstance | データ テンプレートの段階的なレンダリング用のヘルパー メソッドを定義する拡張インスタンスを取得または設定します。
|
コンストラクター
DataTemplate() |
DataTemplate クラスの新しいインスタンスを初期化します。 |
プロパティ
Dispatcher |
常に Windows アプリ SDK アプリで を返します |
DispatcherQueue |
このオブジェクトが |
ExtensionInstanceProperty |
ExtensionInstance XAML 添付プロパティを識別します。 |
添付プロパティ
ExtensionInstance |
データ テンプレートの段階的なレンダリング用のヘルパー メソッドを定義する拡張インスタンスを取得または設定します。 |