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

Bri*_*eon 34 .net c# wpf xaml

显然我做错了什么,但是在使用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>
Run Code Online (Sandbox Code Playgroud)

码:

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;
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

显然我希望它在树视图中显示以下内容.

I am a string
1
I am a string
2
I am a foo
Run Code Online (Sandbox Code Playgroud)

但我的应用程序实际显示以下内容.

a
1
b
2
WpfApplication1.Foo
Run Code Online (Sandbox Code Playgroud)

奇怪的是,我在网上看到的几乎所有例子都做了这件事(略有不同)并且似乎没有其他人遇到问题.然而,我尝试了无数种不同的重新安排XAML的方法,似乎没有任何帮助.我希望另一双眼睛可以帮助.

Mat*_*ton 48

您的代码很好,但您的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>
Run Code Online (Sandbox Code Playgroud)

  • @Brian,欢迎来到WPF学习曲线.你会遇到很多这些,不要让他们让你失望. (13认同)
  • 哈哈......这太尴尬了.有100%我无法告诉你们我在这方面花了多长时间:) (5认同)