DataTemplate クラス

定義

データ オブジェクトのビジュアル構造を記述します。 データ値を表示するテンプレート内の特定の要素には、データ バインディングを使用します。

/// [Windows.Foundation.Metadata.ContractVersion(Windows.Foundation.UniversalApiContract, 65536)]
/// [Windows.Foundation.Metadata.MarshalingBehavior(Windows.Foundation.Metadata.MarshalingType.Agile)]
/// [Windows.Foundation.Metadata.Threading(Windows.Foundation.Metadata.ThreadingModel.Both)]
class DataTemplate : FrameworkTemplate
/// [Windows.Foundation.Metadata.ContractVersion(Windows.Foundation.UniversalApiContract, 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(Windows.Foundation.UniversalApiContract), 65536)]
[Windows.Foundation.Metadata.MarshalingBehavior(Windows.Foundation.Metadata.MarshalingType.Agile)]
[Windows.Foundation.Metadata.Threading(Windows.Foundation.Metadata.ThreadingModel.Both)]
public class DataTemplate : FrameworkTemplate
[Windows.Foundation.Metadata.ContractVersion(typeof(Windows.Foundation.UniversalApiContract), 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
Public Class DataTemplate
Inherits FrameworkTemplate
Implements IElementFactory
<DataTemplate ...>
  templateContent
</DataTemplate>
 

継承
Object IInspectable DependencyObject FrameworkTemplate DataTemplate
属性
実装

Windows の要件

デバイス ファミリ
Windows 10 (10.0.10240.0 で導入)
API contract
Windows.Foundation.UniversalApiContract (v1.0 で導入)

次の例では、DataTemplate を使用して ListBox の項目を表示します。 この例では、 ListBox はオブジェクトの Customer コレクションにバインドされています。 DataTemplate には、および Address の各プロパティにバインドする TextBlock コントロールがFirstNameLastName含まれています。 データ バインディングの詳細については、「データ バインディングの詳細」を参照してください。

<Grid>
    <Grid.Resources>
        <src:Customers x:Key="customers"/>
    </Grid.Resources>

    <ListBox ItemsSource="{StaticResource customers}" Width="350" Margin="0,5,0,10">
        <ListBox.ItemTemplate>
            <DataTemplate>
                <StackPanel Orientation="Horizontal">
                    <TextBlock Padding="5,0,5,0"
          Text="{Binding FirstName}" />
                    <TextBlock Text="{Binding LastName}" />
                    <TextBlock Text=", " />
                    <TextBlock Text="{Binding Address}" />
                </StackPanel>
            </DataTemplate>
        </ListBox.ItemTemplate>
    </ListBox>
</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"));
    }

}
Public Class Customer
    Private _firstName As String
    Private _lastName As String
    Private _address As String

    Public Property FirstName() As String
        Get
            Return _firstName
        End Get

        Set(ByVal value As String)
            _firstName = value
        End Set
    End Property

    Public Property LastName() As String
        Get
            Return _lastName
        End Get

        Set(ByVal value As String)
            _lastName = value
        End Set
    End Property

    Public Property Address() As String
        Get
            Return _address
        End Get

        Set(ByVal value As String)
            _address = value
        End Set
    End Property

    Public Sub New(ByVal firstName As String, ByVal lastName As String, ByVal address As String)
        Me.FirstName = firstName
        Me.LastName = lastName
        Me.Address = address
    End Sub

End Class

Public Class Customers
    Inherits ObservableCollection(Of Customer)

    Public Sub New()
        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"))
    End Sub

End Class

注釈

DataTemplate オブジェクトは、次のプロパティの値として使用されます。

通常、DataTemplate を使用して、データの視覚的表現を指定します。 DataTemplate オブジェクトは、ListBox などの ItemsControl をコレクション全体にバインドする場合に特に便利です。 特定の命令がない場合、 ListBox はコレクション内のオブジェクトの文字列表現を表示します。 DataTemplate を使用して、各データ オブジェクトの外観を定義します。 DataTemplate の内容は、データ オブジェクトの視覚的な構造になります。

通常、DataTemplate ではデータ バインディングを使用します。 たとえば、 ListBox がオブジェクトの Customer コレクションにバインドされ、 ItemTemplate プロパティが DataTemplate に設定されるとします。 ListBox が作成されると、コレクション内のそれぞれに CustomerListBoxItem が作成され、ListBoxItemDataContext が適切な顧客に設定されます。 つまり、最初の ListBoxItemDataContext は最初の顧客に設定され、2 番目の ListBoxItemDataContext は 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 データ テンプレートの段階的なレンダリング用のヘルパー メソッドを定義する拡張インスタンスを取得または設定します。

バージョン履歴

Windows のバージョン SDK バージョン 追加された値
1809 17763 GetElement
1809 17763 RecycleElement

コンストラクター

DataTemplate()

DataTemplate クラスの新しいインスタンスを初期化します。

プロパティ

Dispatcher

このオブジェクトが関連付けられている CoreDispatcher を取得します。 CoreDispatcher は、コードが UI 以外のスレッドによって開始された場合でも、UI スレッド上の DependencyObject にアクセスできる機能を表します。

(継承元 DependencyObject)
ExtensionInstanceProperty

ExtensionInstance XAML 添付プロパティを識別します。

添付プロパティ

ExtensionInstance

データ テンプレートの段階的なレンダリング用のヘルパー メソッドを定義する拡張インスタンスを取得または設定します。

メソッド

ClearValue(DependencyProperty)

依存関係プロパティのローカル値をクリアします。

(継承元 DependencyObject)
GetAnimationBaseValue(DependencyProperty)

依存関係プロパティに対して確立された基本値を返します。これは、アニメーションがアクティブでない場合に適用されます。

(継承元 DependencyObject)
GetElement(ElementFactoryGetArgs)

DataTemplate で宣言された UIElement オブジェクトの既存のインスタンスを作成または取得します。

GetExtensionInstance(FrameworkElement)

ターゲット要素の DataTemplate.ExtensionInstance XAML 添付プロパティの値を取得します。

GetValue(DependencyProperty)

DependencyObject から依存関係プロパティの現在の有効な値を返します。

(継承元 DependencyObject)
LoadContent()

DataTemplateUIElement オブジェクトを作成します。

ReadLocalValue(DependencyProperty)

ローカル値が設定されている場合は、依存関係プロパティのローカル値を返します。

(継承元 DependencyObject)
RecycleElement(ElementFactoryRecycleArgs)

GetElement を使用して以前に取得した UIElement をリサイクルします

RegisterPropertyChangedCallback(DependencyProperty, DependencyPropertyChangedCallback)

この DependencyObject インスタンスの特定の DependencyProperty に対する変更をリッスンするための通知関数を登録します。

(継承元 DependencyObject)
SetExtensionInstance(FrameworkElement, IDataTemplateExtension)

ターゲット要素の DataTemplate.ExtensionInstance XAML 添付プロパティの値を設定します。

SetValue(DependencyProperty, Object)

DependencyObject の依存関係プロパティのローカル値を設定します。

(継承元 DependencyObject)
UnregisterPropertyChangedCallback(DependencyProperty, Int64)

RegisterPropertyChangedCallback を呼び出して以前に登録した変更通知を取り消します。

(継承元 DependencyObject)

適用対象

こちらもご覧ください