DataTemplateSelector.SelectTemplate(Object, DependencyObject) 方法

定義

在衍生類別中覆寫時,根據自訂邏輯傳回 DataTemplate

public:
 virtual System::Windows::DataTemplate ^ SelectTemplate(System::Object ^ item, System::Windows::DependencyObject ^ container);
public virtual System.Windows.DataTemplate SelectTemplate (object item, System.Windows.DependencyObject container);
abstract member SelectTemplate : obj * System.Windows.DependencyObject -> System.Windows.DataTemplate
override this.SelectTemplate : obj * System.Windows.DependencyObject -> System.Windows.DataTemplate
Public Overridable Function SelectTemplate (item As Object, container As DependencyObject) As DataTemplate

參數

item
Object

要選取範本的資料物件。

container
DependencyObject

資料繫結物件。

傳回

傳回 DataTemplatenull。 預設值是 null

範例

在此範例中,系結來源是 物件清單 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 和 覆寫 方法的 SelectTemplate 類別來執行此動作。 定義類別之後,您可以將 類別的實例指派給元素的範本選取器屬性。

適用於