DataTemplateSelector クラス
定義
重要
一部の情報は、リリース前に大きく変更される可能性があるプレリリースされた製品に関するものです。 Microsoft は、ここに記載されている情報について、明示または黙示を問わず、一切保証しません。
データ オブジェクトとデータ バインド要素に基づいて DataTemplate を選択する方法を提供します。
public ref class DataTemplateSelector
public class DataTemplateSelector
type DataTemplateSelector = class
Public Class DataTemplateSelector
- 継承
-
DataTemplateSelector
例
この例では、バインディング ソースは Task オブジェクトの一覧です。
Task オブジェクトのプロパティの 1 つがPriority。
myTaskTemplateとimportantTaskTemplateの 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>
テンプレート セレクター リソースを使用するには、ItemTemplateSelectorの ListBox プロパティに割り当てます。
ListBoxは、基になるコレクション内の各項目のSelectTemplateのTaskListDataTemplateSelector メソッドを呼び出します。 呼び出しは、項目パラメーターとしてデータ オブジェクトを渡します。 メソッドによって返される DataTemplate は、そのデータ オブジェクトに適用されます。
<ListBox Width="400" Margin="10"
ItemsSource="{Binding Source={StaticResource myTodoList}}"
ItemTemplateSelector="{StaticResource myDataTemplateSelector}"
HorizontalContentAlignment="Stretch"/>
完全なサンプルについては、「 データ テンプレートサンプルの概要」を参照してください。
注釈
通常、同じ種類のオブジェクトに対して複数のDataTemplateがあり、各データ オブジェクトのプロパティに基づいて適用するDataTemplateを選択する独自のロジックを指定する場合は、DataTemplateSelectorを作成します。 異なる型のオブジェクトがある場合は、DataTemplateにDataTypeプロパティを設定できます。 その場合、 DataTemplateSelectorを作成する必要はありません。 さらに、同じ型のオブジェクトがあり、プロパティが異なる場合は、 DataTrigger またはデータ コンバーターの使用も検討できます。 詳細については、「 データ テンプレートの概要」を参照してください。
テンプレート セレクターを作成するには、 DataTemplateSelector から継承するクラスを作成し、 SelectTemplate メソッドをオーバーライドします。 クラスが定義されたら、クラスのインスタンスを要素のテンプレート セレクター プロパティに割り当てることができます。
コンストラクター
| 名前 | 説明 |
|---|---|
| DataTemplateSelector() |
DataTemplateSelector クラスの新しいインスタンスを初期化します。 |
メソッド
| 名前 | 説明 |
|---|---|
| Equals(Object) |
指定したオブジェクトが現在のオブジェクトと等しいかどうかを判断します。 (継承元 Object) |
| GetHashCode() |
既定のハッシュ関数として機能します。 (継承元 Object) |
| GetType() |
現在のインスタンスの Type を取得します。 (継承元 Object) |
| MemberwiseClone() |
現在の Objectの簡易コピーを作成します。 (継承元 Object) |
| SelectTemplate(Object, DependencyObject) |
派生クラスでオーバーライドされると、カスタム ロジックに基づいて DataTemplate が返されます。 |
| ToString() |
現在のオブジェクトを表す文字列を返します。 (継承元 Object) |