次の方法で共有


DataTemplateSelector クラス

定義

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

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

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

データ オブジェクトの Priority の値に基づいて使用する DataTemplate を選択するロジックを提供するには、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>

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

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

完全なサンプルについては、「Introduction to Data Templating Sample」(データ テンプレート サンプルの概要) をご覧ください。

注釈

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

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

コンストラクター

DataTemplateSelector()

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

メソッド

Equals(Object)

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

(継承元 Object)
GetHashCode()

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

(継承元 Object)
GetType()

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

(継承元 Object)
MemberwiseClone()

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

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

派生クラスでオーバーライドされた場合、カスタム ロジックに基づいた DataTemplate を返します。

ToString()

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

(継承元 Object)

適用対象