Так что, очевидно, я делаю что-то неправильно, но я просто не могу заставить HierarchicalDataTemplate (или даже просто DataTemplate) работать при использовании свойства DataType. Я создал кратчайшее возможное приложение WPF для демонстрации проблемы.Как использовать свойство DataType на 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>
КОД:
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;
}
}
}
Очевидно, я ожидал, что дисплей следующий экран в TreeView.
I am a string
1
I am a string
2
I am a foo
Но мое приложение фактически отображает следующее.
a
1
b
2
WpfApplication1.Foo
Самое странное в том, что почти каждый пример, который я вижу в Интернете делает эту самую вещь (с небольшими вариациями), и никто больше не кажется, что имеет проблемы с ним. Тем не менее я пробовал бесчисленные различные способы перестановки XAML, и ничто, похоже, не помогает. Я надеюсь, что другие пары могут помочь.
Ха-ха ... это так неловко. Существует 100%, я не говорю никому из вас, как долго я работал над этим :) –
Я * думаю * вы также можете уйти с DataType = "local: Foo" (без x: Тип или фигурные скобки) , так что не стесняйтесь. Это простая ошибка! –
@Brian, добро пожаловать на кривую обучения WPF. Вы столкнетесь с МНОГИМ из них, не позволяйте им сбивать вас. – user7116