次の方法で共有


DataTemplate クラス

定義

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

/// [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
継承
Object IInspectable DependencyObject FrameworkTemplate DataTemplate
属性
実装

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

<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オブジェクトは、次のプロパティの値として使用されます。

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

通常、DataTemplate ではデータ バインディングを使用します。 たとえば、 ListView がオブジェクトの Customer コレクションにバインドされ、 ItemTemplate プロパティが DataTemplate に設定されるとします。 ListView が作成されると、コレクション内のそれぞれにCustomer対して ListViewItem が作成され、ListViewItemDataContext が適切な顧客に設定されます。 つまり、最初の ListViewItemDataContext は最初の顧客に設定され、2 番目の ListViewItemDataContext は 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 アプリで を返しますnull。 代わりに DispatcherQueue を使用してください。

(継承元 DependencyObject)
DispatcherQueue

このオブジェクトが DispatcherQueue 関連付けられている を取得します。 は DispatcherQueue 、コードが 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)

適用対象

こちらもご覧ください