WPF:正确地将对象存储在TreeViewItem中

And*_*ech 5 wpf treeview casting

为了在TreeViewItem中存储一个对象(比如一个类的实例),我当前正在将该对象存储在TreeViewItems中Header,然后覆盖ToString该类的方法,以便它显示正确的字符串头; 然后我在活动期间将物体投回.


这是实现这种事情的正确方法,还是有更好,更正确的方法?

Ken*_*art 7

"正确"的方法是只添加objectTreeView's(或TreeViewItem's)Items集合并使用a HierarchicalDataTemplate来控制项目的呈现方式:

Person.cs:

public class Person
{
    private readonly ICollection<Person> _children = new ObservableCollection<Person>();

    public string Name { get; set; }

    public ICollection<Person> Children
    {
        get
        {
            return _children;
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

Window1.xaml.cs:

public Window1()
{
    InitializeComponent();

    var people = new List<Person>();
    var kent = new Person() { Name = "Kent" };
    kent.Children.Add(new Person() { Name = "Tempany" });
    people.Add(kent);
    _treeView.ItemsSource = people;
}
Run Code Online (Sandbox Code Playgroud)

Window1.xaml:

<TreeView x:Name="_treeView">
    <TreeView.Resources>
        <HierarchicalDataTemplate DataType="{x:Type local:Person}" ItemsSource="{Binding Children}">
            <TextBlock Text="{Binding Name}"/>
        </HierarchicalDataTemplate>
    </TreeView.Resources>
</TreeView>
Run Code Online (Sandbox Code Playgroud)