Donc, évidemment, je fais quelque chose de mal, mais je n'arrive tout simplement pas à obtenir le HierarchicalDataTemplate (ou même seulement DataTemplate) pour travailler avec la propriété DataType. J'ai créé l'application WPF la plus courte possible pour démontrer le problème.Comment utiliser la propriété DataType sur un 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>
CODE:
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;
}
}
}
Il est évident que j'attends qu'il affiche ce qui suit dans l'arborescence.
I am a string
1
I am a string
2
I am a foo
Mais mon application affiche réellement ce qui suit.
a
1
b
2
WpfApplication1.Foo
La chose étrange est que presque tous les exemples que je vois sur le web fait cette chose (avec des variations légères) et personne ne semble être un problème avec elle. Pourtant, j'ai essayé d'innombrables façons de réorganiser le XAML et rien ne semble aider. J'espère qu'un autre couple d'yeux peut aider.
Haha ... c'est tellement embarrassant. Il n'y a aucun moyen de dire à l'un de vous combien de temps j'ai passé à travailler dessus :) –
Je * pense * que vous pouvez aussi sortir avec DataType = "local: Foo" (sans le x: Type ou les accolades) alors ne sois pas gêné. C'est une erreur facile à faire! –
@Brian, bienvenue sur la courbe d'apprentissage WPF. Vous rencontrerez BEAUCOUP de ceux-ci, ne les laissez pas vous abattre. – user7116