首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >WPF DataBound树视图展开/折叠

WPF DataBound树视图展开/折叠
EN

Stack Overflow用户
提问于 2009-11-12 03:56:00
回答 2查看 29.5K关注 0票数 22

我只是想找到一种方法,通过TreeView节点所绑定的对象来控制它们的展开/折叠。该对象有一个IsExpanded属性,我想用它来显示基于该属性展开或折叠的TreeView节点本身。

下面是我的代码:

C#:

代码语言:javascript
运行
复制
public partial class Window2 : Window
{
    public Window2()
    {
        InitializeComponent();

        this.DataContext = new List<Parent>() { Base.GetParent("Parent 1"), Base.GetParent("Parent 2") };
    }
}

public class Base
{
    public string Name { get; set; }
    public bool IsExpanded { get; set; }

    public static Parent GetParent(string name)
    {
        Parent p = new Parent() { Name = name };

        p.Children.Add(new Child() { Name = "Child 1", GrandChildren = new ObservableCollection<GrandChild>() { new GrandChild() { Name = "Grandchild 1" } } });
        p.Children.Add(new Child() { Name = "Child 2", GrandChildren = new ObservableCollection<GrandChild>() { new GrandChild() { Name = "Grandchild 1" } } });
        p.Children.Add(new Child() { Name = "Child 3", GrandChildren = new ObservableCollection<GrandChild>() { new GrandChild() { Name = "Grandchild 1" } } });

        return p;
    }
}

public class Parent : Base
{
    public ObservableCollection<Child> Children { get; set; }

    public Parent()
    {
        this.Children = new ObservableCollection<Child>();
    }
}

public class Child : Base
{
    public ObservableCollection<GrandChild> GrandChildren { get; set; }

    public Child()
    {
        this.GrandChildren = new ObservableCollection<GrandChild>();
    }
}

public class GrandChild : Base
{
}

XAML:

代码语言:javascript
运行
复制
<Window x:Class="HeterogeneousExperimentExplorer.Window2"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        xmlns:local="clr-namespace:HeterogeneousTree"
    Title="Window2" Height="300" Width="300">
    <Window.Resources>
        <HierarchicalDataTemplate DataType="{x:Type local:Parent}" ItemsSource="{Binding Children}">
            <TextBlock Text="{Binding Name}" />
            <HierarchicalDataTemplate.ItemTemplate>
                <HierarchicalDataTemplate DataType="{x:Type local:Parent}" ItemsSource="{Binding GrandChildren}">
                    <TextBlock Text="{Binding Name}" />
                    <HierarchicalDataTemplate.ItemTemplate>
                        <DataTemplate>
                            <TextBlock Text="{Binding Name}" />
                        </DataTemplate>
                    </HierarchicalDataTemplate.ItemTemplate>
                </HierarchicalDataTemplate>
            </HierarchicalDataTemplate.ItemTemplate>
        </HierarchicalDataTemplate>
    </Window.Resources>
    <Grid>
        <TreeView ItemsSource="{Binding}" />
    </Grid>
</Window>
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2009-11-12 04:31:24

想出了解决方案。非常简单:

代码语言:javascript
运行
复制
    <Style TargetType="{x:Type TreeViewItem}">
        <Setter Property="IsExpanded" Value="{Binding IsNodeExpanded}">
        </Setter>
    </Style>

因此,该样式获取绑定到TreeViewItem的对象,并查看其IsNodeExpanded属性,然后将该值赋给TreeViewItem.IsExpanded属性。如果添加Mode=TwoWay,它们将相互通知(TreeViewItem将在对象展开时通知对象)。

谢谢!

票数 51
EN

Stack Overflow用户

发布于 2010-09-09 16:14:31

你可能会对这个CodeProject article by Josh Smith感兴趣,它展示了如何使用通用的(n级)方法创建一个基于MVVM的树视图。

我并不是说卡洛的实现有任何问题,但我发现这篇文章对理解TreeView控件和一般的MVVM有帮助。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1717654

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档