Quindi ovviamente sto facendo qualcosa di sbagliato, ma non riesco proprio a far funzionare HierarchicalDataTemplate (o anche solo DataTemplate) quando utilizzo la proprietà DataType. Ho creato l'applicazione WPF più breve possibile per dimostrare il problema.Come utilizzare la proprietà DataType su 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>
CODICE:
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;
}
}
}
Ovviamente mi aspetto che visualizza il seguente nella vista ad albero.
I am a string
1
I am a string
2
I am a foo
Ma la mia applicazione visualizza effettivamente quanto segue.
a
1
b
2
WpfApplication1.Foo
La cosa strana è che quasi tutti gli esempi che vedo sul web lo fa questa cosa molto (con lievi variazioni) e nessun altro sembra avere un problema con esso. Eppure ho provato innumerevoli modi diversi di riorganizzare lo XAML e nulla sembra aiutare. Spero che un altro paio di occhi possa aiutare.
Haha ... è così imbarazzante. Non c'è il 100% in alcun modo che io possa dire a nessuno di voi quanto tempo ho passato a lavorare su questo :) –
I * think * è possibile anche scappare con DataType = "local: Foo" (senza x: Type o le parentesi graffe) , quindi non essere imbarazzato. È un errore facile da fare! –
@Brian, benvenuto nella curva di apprendimento di WPF. Ne troverai MOLTI di questi, non lasciarti abbattere. – user7116