Obviamente, estoy haciendo algo mal, pero parece que no puedo hacer que HierarchicalDataTemplate (o incluso solo DataTemplate) funcione cuando se usa la propiedad DataType. Creé la aplicación WPF más corta posible para demostrar el problema.¿Cómo uso la propiedad DataType en un WPF DataTemplate?
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>
CÓDIGO:
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;
}
}
}
Obviamente, yo estoy esperando que aparezca el siguiente en la vista de árbol.
I am a string
1
I am a string
2
I am a foo
Pero mi aplicación realmente muestra lo siguiente.
a
1
b
2
WpfApplication1.Foo
Lo más curioso es que casi todos los ejemplos que veo en la web hace esto mismo (con ligeras variaciones) y nadie más parece tener un problema con él. Sin embargo, he intentado innumerables formas diferentes de reorganizar el XAML y nada parece ayudar. Espero que otro par de ojos pueda ayudar.
Jaja ... eso es tan embarazoso. No hay manera de que les diga a ninguno de ustedes cuánto tiempo pasé trabajando en esto :) –
I * think * también puede salirse con DataType = "local: Foo" (sin la x: Tipo o llaves) , así que no te avergüences. ¡Es un error fácil de hacer! –
@Brian, bienvenido a la curva de aprendizaje de WPF. Te encontrarás con MUCHOS de estos, no dejes que te depriman. – user7116