DataTemplate 類別

定義

說明資料物件的視覺化結構。 針對顯示資料值的範本中特定元素使用資料系結。

/// [Windows.Foundation.Metadata.ContractVersion(Microsoft.UI.Xaml.WinUIContract, 65536)]
/// [Windows.Foundation.Metadata.MarshalingBehavior(Windows.Foundation.Metadata.MarshalingType.Agile)]
/// [Windows.Foundation.Metadata.Threading(Windows.Foundation.Metadata.ThreadingModel.Both)]
class DataTemplate : FrameworkTemplate, IElementFactory
[Windows.Foundation.Metadata.ContractVersion(typeof(Microsoft.UI.Xaml.WinUIContract), 65536)]
[Windows.Foundation.Metadata.MarshalingBehavior(Windows.Foundation.Metadata.MarshalingType.Agile)]
[Windows.Foundation.Metadata.Threading(Windows.Foundation.Metadata.ThreadingModel.Both)]
public class DataTemplate : FrameworkTemplate, IElementFactory
Public Class DataTemplate
Inherits FrameworkTemplate
Implements IElementFactory
繼承
Object IInspectable DependencyObject FrameworkTemplate DataTemplate
屬性
實作

範例

下列範例會使用 DataTemplate 來顯示 ListView的專案。 在此範例中, ListView 會系結至 物件的集合 Customer 。 DataTemplate 包含系結至 、 LastNameAddress 屬性的 FirstNameTextBlock控制項。 如需資料系結的詳細資訊,請參閱 深入資料系結

<Grid>
    <Grid.Resources>
        <local:Customers x:Key="customers"/>
    </Grid.Resources>

    <ListView ItemsSource="{StaticResource customers}" 
       Width="350" Margin="0,4,0,8">
        <ListView.ItemTemplate>
            <DataTemplate x:DataType="local:Customer">
                <StackPanel>
                    <StackPanel Orientation="Horizontal">
                        <TextBlock Text="{x:Bind LastName}"/>
                        <TextBlock Text="," Margin="0,0,2,0"/>
                        <TextBlock Text="{x:Bind FirstName}"/>
                    </StackPanel>
                    <TextBlock Text="{x:Bind Address}" Margin="8,0,0,2"/>
                </StackPanel>
            </DataTemplate>
        </ListView.ItemTemplate>
    </ListView>
</Grid>
public class Customer
{
    public String FirstName { get; set; }
    public String LastName { get; set; }
    public String Address { get; set; }

    public Customer(String firstName, String lastName, String address)
    {
        this.FirstName = firstName;
        this.LastName = lastName;
        this.Address = address;
    }

}

public class Customers : ObservableCollection<Customer>
{
    public Customers()
    {
        Add(new Customer("Michael", "Anderberg",
                "12 North Third Street, Apartment 45"));
        Add(new Customer("Chris", "Ashton",
                "34 West Fifth Street, Apartment 67"));
        Add(new Customer("Seo-yun", "Jun",
                "56 East Seventh Street, Apartment 89"));
        Add(new Customer("Guido", "Pica",
                "78 South Ninth Street, Apartment 10"));
    }

}

備註

DataTemplate物件會用來做為這些屬性的值:

您通常會使用 DataTemplate 來指定資料的視覺表示。 當您將 ItemsControl 例如 ListBox 系結至整個集合時,DataTemplate 物件特別有用。 如果沒有特定指示, ListBox 會顯示集合中物件的字串表示。 使用 DataTemplate 定義每個資料物件的外觀。 DataTemplate 的內容會變成資料物件的視覺結構。

您通常會在 DataTemplate 中使用資料系結。 例如,假設 ListView 系結至 物件的集合 Customer ,並將 ItemTemplate 屬性設定為 DataTemplate 。 建立 ListView 時,會針對 Customer 集合中的每個專案建立ListViewItem而 ListViewItemDataCoNtext會設定為適當的客戶。 換句話說,第一個ListViewItemDataCoNtext會設定為第一個客戶、第二個ListViewItemDataCoNtext設定為第二個客戶等等。 您可以系結 DataTemplate 中的元素,以顯示來自每個 Customer 物件的屬性值。

您也可以使用 DataTemplate 跨多個ContentControl物件共用UIElement物件。 例如,假設您的應用程式上需要多個按鈕,才能有相同的圖形。 您可以建立包含圖形的 DataTemplate,並將它當做按鈕的 ContentTemplate 使用。 ContentTemplate的資料範本也可以使用資料系結。 但在此情況下,資料內容與套用範本的專案相同。 這通常是一個資料物件,而且沒有專案的概念。

您可以將 DataTemplate 放置為 XAML 中 ItemTemplate 屬性專案的直接子系。 這稱為 內嵌範本 ,如果您不需要針對 UI 的其他區域使用相同的資料範本,就會這麼做。 您也可以將 DataTemplate 定義為資源,然後將資源參考為 ItemTemplate 屬性的值。 一旦它是資源,您就可以針對需要資料範本的多個 UI 元素使用相同的範本。 如果您將資料範本分解為 Application.Resources,您甚至可以為 UI 的不同頁面共用相同的範本。

資料範本內容的 XAML 使用方式不會公開為可設定的程式碼屬性。 這是 DataTemplate XAML 處理中內建的特殊行為。

針對進階資料系結案例,您可能想要讓資料的屬性判斷哪個範本應該產生其 UI 標記法。 在此案例中,您可以使用 DataTemplateSelector 並設定 ItemTemplateSelector 之類的屬性,將它指派給資料檢視。 DataTemplateSelector是您自己撰寫的邏輯類別,其方法會根據您自己的邏輯與資料互動,將一個 DataTemplate 傳回至系結引擎。 如需詳細資訊,請參閱深入了解資料繫結

XAML 附加屬性

DataTemplate 是 XAML 附加屬性的主機服務類別。

為了支援 XAML 處理器存取附加屬性,以及公開對等 的 getset 作業給程式碼,每個 XAML 附加屬性都有一對 Get 和 Set 存取子方法。 在程式碼中取得或設定值的另一種方式是使用相依性屬性系統,呼叫 GetValueSetValue ,並將識別碼欄位傳遞為相依性屬性識別碼。

附加屬性 描述
ExtensionInstance 取得或設定擴充實例,這個實例會定義分階段轉譯資料範本的協助程式方法。

建構函式

DataTemplate()

初始化 DataTemplate 類別的新實例。

屬性

Dispatcher

一律會在 null Windows 應用程式 SDK應用程式中傳回。 請改用 DispatcherQueue

(繼承來源 DependencyObject)
DispatcherQueue

DispatcherQueue取得與這個 物件相關聯的 。 DispatcherQueue表示即使程式碼是由非 UI 執行緒起始,也可以存取 DependencyObject UI 執行緒上的 。

(繼承來源 DependencyObject)
ExtensionInstanceProperty

識別 ExtensionInstance XAML 附加屬性。

附加屬性

ExtensionInstance

取得或設定擴充實例,這個實例會定義分階段轉譯資料範本的協助程式方法。

方法

ClearValue(DependencyProperty)

清除相依性屬性的本機值。

(繼承來源 DependencyObject)
GetAnimationBaseValue(DependencyProperty)

傳回針對相依性屬性所建立的任何基底值,如果動畫未使用中,則會套用。

(繼承來源 DependencyObject)
GetElement(ElementFactoryGetArgs)

建立或擷取DataTemplate中宣告之UIElement物件的現有實例。

GetExtensionInstance(FrameworkElement)

取得目標專案的 DataTemplate.ExtensionInstance XAML 附加屬性的值。

GetValue(DependencyProperty)

DependencyObject傳回相依性屬性的目前有效值。

(繼承來源 DependencyObject)
LoadContent()

DataTemplate中建立UIElement物件。

ReadLocalValue(DependencyProperty)

如果已設定本機值,則傳回相依性屬性的本機值。

(繼承來源 DependencyObject)
RecycleElement(ElementFactoryRecycleArgs)

回收先前使用GetElement擷取的UIElement

RegisterPropertyChangedCallback(DependencyProperty, DependencyPropertyChangedCallback)

註冊通知函式,以接聽此DependencyObject實例上特定DependencyProperty的變更。

(繼承來源 DependencyObject)
SetExtensionInstance(FrameworkElement, IDataTemplateExtension)

設定目標專案的 DataTemplate.ExtensionInstance XAML 附加屬性的值。

SetValue(DependencyProperty, Object)

DependencyObject上設定相依性屬性的本機值。

(繼承來源 DependencyObject)
UnregisterPropertyChangedCallback(DependencyProperty, Int64)

取消先前透過呼叫 RegisterPropertyChangedCallback註冊的變更通知。

(繼承來源 DependencyObject)

適用於

另請參閱