次の方法で共有


DataTemplateSelector クラス

定義

データ オブジェクトとデータ バインド要素に基づいて DataTemplate を選択する方法を提供します。

public ref class DataTemplateSelector
public class DataTemplateSelector
type DataTemplateSelector = class
Public Class DataTemplateSelector
継承
DataTemplateSelector

この例では、バインディング ソースは Task オブジェクトの一覧です。 Task オブジェクトのプロパティの 1 つがPrioritymyTaskTemplateimportantTaskTemplateの 2 つのデータ テンプレートが定義されています。

データ オブジェクトのDataTemplate値に基づいて使用するPriorityを選択するロジックを指定するには、DataTemplateSelectorのサブクラスを作成し、SelectTemplate メソッドをオーバーライドします。 次の例では、 SelectTemplate メソッドは、 Priority プロパティの値に基づいて適切なテンプレートを返すロジックを提供します。 返すテンプレートは、エンベロープ Window 要素のリソースにあります。

using System.Windows;
using System.Windows.Controls;

namespace SDKSample
{
    public class TaskListDataTemplateSelector : DataTemplateSelector
    {
        public override DataTemplate
            SelectTemplate(object item, DependencyObject container)
        {
            FrameworkElement element = container as FrameworkElement;

            if (element != null && item != null && item is Task)
            {
                Task taskitem = item as Task;

                if (taskitem.Priority == 1)
                    return
                        element.FindResource("importantTaskTemplate") as DataTemplate;
                else
                    return
                        element.FindResource("myTaskTemplate") as DataTemplate;
            }

            return null;
        }
    }
}

Namespace SDKSample
    Public Class TaskListDataTemplateSelector
        Inherits DataTemplateSelector
        Public Overrides Function SelectTemplate(ByVal item As Object, ByVal container As DependencyObject) As DataTemplate

            Dim element As FrameworkElement
            element = TryCast(container, FrameworkElement)

            If element IsNot Nothing AndAlso item IsNot Nothing AndAlso TypeOf item Is Task Then

                Dim taskitem As Task = TryCast(item, Task)

                If taskitem.Priority = 1 Then
                    Return TryCast(element.FindResource("importantTaskTemplate"), DataTemplate)
                Else
                    Return TryCast(element.FindResource("myTaskTemplate"), DataTemplate)
                End If
            End If

            Return Nothing
        End Function
    End Class
End Namespace

その後、 TaskListDataTemplateSelector をリソースとして宣言できます。

<Window.Resources>
<local:TaskListDataTemplateSelector x:Key="myDataTemplateSelector"/>
</Window.Resources>

テンプレート セレクター リソースを使用するには、ItemTemplateSelectorListBox プロパティに割り当てます。 ListBoxは、基になるコレクション内の各項目のSelectTemplateTaskListDataTemplateSelector メソッドを呼び出します。 呼び出しは、項目パラメーターとしてデータ オブジェクトを渡します。 メソッドによって返される DataTemplate は、そのデータ オブジェクトに適用されます。

<ListBox Width="400" Margin="10"
         ItemsSource="{Binding Source={StaticResource myTodoList}}"
         ItemTemplateSelector="{StaticResource myDataTemplateSelector}"
         HorizontalContentAlignment="Stretch"/>

完全なサンプルについては、「 データ テンプレートサンプルの概要」を参照してください。

注釈

通常、同じ種類のオブジェクトに対して複数のDataTemplateがあり、各データ オブジェクトのプロパティに基づいて適用するDataTemplateを選択する独自のロジックを指定する場合は、DataTemplateSelectorを作成します。 異なる型のオブジェクトがある場合は、DataTemplateDataTypeプロパティを設定できます。 その場合、 DataTemplateSelectorを作成する必要はありません。 さらに、同じ型のオブジェクトがあり、プロパティが異なる場合は、 DataTrigger またはデータ コンバーターの使用も検討できます。 詳細については、「 データ テンプレートの概要」を参照してください。

テンプレート セレクターを作成するには、 DataTemplateSelector から継承するクラスを作成し、 SelectTemplate メソッドをオーバーライドします。 クラスが定義されたら、クラスのインスタンスを要素のテンプレート セレクター プロパティに割り当てることができます。

コンストラクター

名前 説明
DataTemplateSelector()

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

メソッド

名前 説明
Equals(Object)

指定したオブジェクトが現在のオブジェクトと等しいかどうかを判断します。

(継承元 Object)
GetHashCode()

既定のハッシュ関数として機能します。

(継承元 Object)
GetType()

現在のインスタンスの Type を取得します。

(継承元 Object)
MemberwiseClone()

現在の Objectの簡易コピーを作成します。

(継承元 Object)
SelectTemplate(Object, DependencyObject)

派生クラスでオーバーライドされると、カスタム ロジックに基づいて DataTemplate が返されます。

ToString()

現在のオブジェクトを表す文字列を返します。

(継承元 Object)

適用対象