DataTemplateSelector 類別
定義
重要
部分資訊涉及發行前產品,在發行之前可能會有大幅修改。 Microsoft 對此處提供的資訊,不做任何明確或隱含的瑕疵擔保。
根據資料物件和資料繫結項目,提供方法來選擇 DataTemplate。
public ref class DataTemplateSelector
public class DataTemplateSelector
type DataTemplateSelector = class
Public Class DataTemplateSelector
- 繼承
-
DataTemplateSelector
範例
在此範例中,系結來源是 物件清單 Task
。 物件的其中一個 Task
屬性是 Priority
。 已定義兩個資料範本和 myTaskTemplate
importantTaskTemplate
。
若要提供邏輯來選擇要 DataTemplate 根據 Priority
資料物件值使用的邏輯,請建立 的 DataTemplateSelector 子類別並覆寫 SelectTemplate 方法。 在下列範例中,方法會 SelectTemplate 根據 屬性的值,提供傳回適當範本的 Priority
邏輯。 在 enveloping 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"/>
如需完整範例,請參閱資料範本化範例簡介。
備註
一般而言,當您為相同類型的物件建立 DataTemplateSelector 一個 DataTemplate 以上的 ,而且您想要提供自己的邏輯,以根據每個資料物件的屬性來套 DataTemplate 用 。 請注意,如果您有不同類型的物件,您可以在 上 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) |