树视图,HierarchicalDataTemplate和递归数据 [英] TreeView, HierarchicalDataTemplate and recursive Data

查看:256
本文介绍了树视图,HierarchicalDataTemplate和递归数据的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

有关我的TreeView我有两个不同的类,提供的ItemsSource。

For my treeview I have two different classes that provide the ItemsSource.

public class TreeViewModel : ViewModelBase
{
    public ObservableCollection<NodeViewModel> Items { get; set; }
}

public class NodeViewModel : ViewModelBase
{
    public string Id { get; set; }
    public string Name { get; set; }
    public ObservableCollection<NodeViewModel> Children { get; set; }
}

现在我希望我的TreeView,以显示TreeViewModel的项目和显示分层数据由NodeViewModel提供。

Now I want my TreeView to display the Items in TreeViewModel and show hierarchical data as provided by the NodeViewModel.

下面是我的XAML

<Window x:Class="TreeViewMasterDetails.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        xmlns:local="clr-namespace:TreeViewMasterDetails" 
        Title="MainWindow" Height="350" Width="525">
    <Grid>
        <TreeView Height="Auto" 
                  HorizontalAlignment="Stretch" 
                  Margin="10" 
                  VerticalAlignment="Stretch" 
                  Width="Auto">
            <TreeView.Resources>
                <HierarchicalDataTemplate DataType="x:Type local:TreeViewModel" ItemsSource="{Binding Items}">
                    <TextBlock Text="{Binding Path=Name}"></TextBlock>
                </HierarchicalDataTemplate>
                <HierarchicalDataTemplate DataType="x:Type local:NodeViewModel" ItemsSource="{Binding Children}">
                    <TextBlock Text="{Binding Name}"></TextBlock>
                </HierarchicalDataTemplate>
            </TreeView.Resources>
        </TreeView>
    </Grid>
</Window>

试过提供项目的ItemsSource 树视图
它不显示数据分层,如果显示任何内容。

Have tried to provide Items as the ItemsSource of the TreeView. It does not show the data hierarchically, if displaying anything.

和我尝试使用的ItemTemplate 而不是 TreeView.Resources 了。

And I tried using the ItemTemplate instead of the TreeView.Resources, too.

有什么不对呢?

也许一个问题是第一个 TextBlock的文本装订
我想显示名称项目的 NodeViewModel 属性那里。

Perhaps a problem is the first TextBlock Text Binding? I want to display the Name property of the NodeViewModel in Items there.

推荐答案

作为@ sa_ddam213说,你只需要在 HierarchicalDataTemplate NodeViewModel ,而是用你的code中的唯一的问题是缺少括号( {} )为数据类型=X:类型本地:TreeViewModel在您的数据模板定义(这应该是数据类型={X:类型本地:TreeViewModel })。添加支架和的ItemsSource 结合解决了这个问题:

As @sa_ddam213 said, you only need the HierarchicalDataTemplate for NodeViewModel, but the only problem with your code was the missing braces ({ and }) for DataType="x:Type local:TreeViewModel" in your data template definitions (it should be DataType="{x:Type local:TreeViewModel}"). Adding brackets and ItemsSource binding solves the problem:

额外的 HierarchicalDataTemplate TreeViewModel 不使用,但它不会伤害。

The additional HierarchicalDataTemplate for TreeViewModel is not used, but it does not harm.

这篇关于树视图,HierarchicalDataTemplate和递归数据的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆