DataTemplateSelector 類別

定義

根據資料物件和資料繫結項目,提供方法來選擇 DataTemplate

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

範例

在此範例中,系結來源是 物件清單 Task 。 物件的其中一個 Task 屬性是 Priority 。 已定義兩個資料範本和 myTaskTemplateimportantTaskTemplate

若要提供邏輯來選擇要 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>

若要使用範本選取器資源,請將它指派給 ItemTemplateSelectorListBox 屬性。 會 ListBox 針對基礎集合中的每個專案呼叫 SelectTemplateTaskListDataTemplateSelector 方法。 該呼叫會將資料物件當做項目參數傳遞。 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)

適用於