簡體   English   中英

如何在WPF DataTemplate上使用DataType屬性?

[英]How do I use the DataType property on a WPF DataTemplate?

顯然我做錯了什么,但是在使用DataType屬性時,我似乎無法使HierarchicalDataTemplate(甚至只是DataTemplate)工作。 我已經創建了最短的WPF應用程序來演示這個問題。

XAML:

<Window x:Class="WpfApplication1.Window1"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:System="clr-namespace:System;assembly=mscorlib"
    xmlns:local="clr-namespace:WpfApplication1"
    Title="Window1" Height="300" Width="300" Loaded="Window_Loaded">
    <Window.Resources>
        <HierarchicalDataTemplate DataType="x:Type local:Foo">
            <TextBlock Text="I am a Foo" />
        </HierarchicalDataTemplate>
        <HierarchicalDataTemplate DataType="x:Type System:String">
            <TextBlock Text="I am a String" />
        </HierarchicalDataTemplate>
    </Window.Resources>
    <Grid>
        <TreeView Name="treeView1" ItemsSource="{Binding}" />
    </Grid>
</Window>

碼:

namespace WpfApplication1
{
    public class Foo
    {
        public string Name { get; set; }
    }

    public partial class Window1 : Window
    {
        public Window1()
        {
            InitializeComponent();
        }

        private void Window_Loaded(object sender, RoutedEventArgs e)
        {
            var list = new List<object> { "a", 1, "b", 2, new Foo() { Name="Brian"}};
            treeView1.DataContext = list;
        }
    }
}

顯然我希望它在樹視圖中顯示以下內容。

I am a string
1
I am a string
2
I am a foo

但我的應用程序實際顯示以下內容。

a
1
b
2
WpfApplication1.Foo

奇怪的是,我在網上看到的幾乎所有例子都做了這件事(略有不同)並且其他人似乎沒有遇到任何問題。 然而,我嘗試了無數種不同的重新安排XAML的方法,似乎沒有任何幫助。 我希望另一雙眼睛可以幫助。

您的代碼很好,但您的DataType屬性值需要用花括號括起來:

<HierarchicalDataTemplate DataType="{x:Type local:Foo}">
    <TextBlock Text="I am a Foo" />
</HierarchicalDataTemplate>
<HierarchicalDataTemplate DataType="{x:Type System:String}">
    <TextBlock Text="I am a String" />
</HierarchicalDataTemplate>

此外,如果您不使用HierarchicalDataTemplate的ItemsSource,您也可以使用DataTemplate。

您尚未指定TreeView的ItemTemplate屬性。 此屬性告訴TreeView要使用哪個DataTemplate,在您的情況下,您要指定資源中定義的那個:

<TreeView Name="treeView1"
          ItemsSource="{Binding}"
          ItemTemplate="{StaticResource MyResourceItemTemplate}" />

但在您的情況下,您實際上可能希望使用應用於TreeView.ItemTemplateSelector屬性的DataTemplateSelector實現,以根據要顯示的類型選擇不同的模板...

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM