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

WPF DataBound树视图展开/折叠
EN

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

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

下面是我的代码:

C#:

代码语言:javascript
运行
AI代码解释
复制
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
运行
AI代码解释
复制
<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-11 20:31:24

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

代码语言:javascript
运行
AI代码解释
复制
    <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 08:14:31

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

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

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

https://stackoverflow.com/questions/1717654

复制
相关文章
QtCreator技巧-代码折叠/展开
1.光标指向对应的代码块操作ctrl + shift + <折叠代码块和ctrl + shift + >展开代码块; 2.edit(编辑)->advanved(高级)->Toggle Fold All(切换折叠所有); 3.在编辑界面点击行号所在的三角形图标可以折叠和展开代码。
Qt君
2019/07/15
4.4K0
QtCreator技巧-代码折叠/展开
点击展开显示折叠内容
发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/111722.html原文链接:https://javaforall.cn
全栈程序员站长
2022/07/12
2.8K0
点击展开显示折叠内容
展开与折叠菜单动画
最简单的展开与折叠菜单,一般是通过切换display属性的none和block的值来实现。但是这样会使得整个过程非常的生硬,内容是一瞬间展示给用户,交互过程感觉不是特别好。我们加上动画以后让整个过程更加柔和。
_kyle
2020/08/24
3.8K0
展开与折叠菜单动画
iOS支持展开折叠的弹出菜单(水平方向弹出菜单视图)
文章:https://kunnan.blog.csdn.net/article/details/106406160
公众号iOS逆向
2021/07/29
2.6K0
Android-文本折叠点击展开
Demo:https://github.com/LonglyWolf/NavigationSystemHLJU
圆号本昊
2021/09/24
1.1K0
Android-文本折叠点击展开
iOS支持展开折叠的弹出菜单(水平方向弹出菜单视图) 【修订版】
文章:https://kunnan.blog.csdn.net/article/details/106406160
公众号iOS逆向
2021/07/30
2K0
层次树展开问题
在数据仓库的层次建模时,常用递归的方式表示一颗层次树,但有些BI工具的前端不支持递归,所以为了实现数据下钻,可以把一棵递归树进行扩展。
用户1148526
2019/05/25
5670
winform如何保持TreeView节点展开和折叠的状态
转载:http://blog.sina.com.cn/s/blog_6abcacf5010138q5.html
跟着阿笨一起玩NET
2018/09/19
2.5K0
WPF 控件继承树
本文会经常更新,请阅读原文: https://lindexi.gitee.io/post/WPF-%E6%8E%A7%E4%BB%B6%E7%BB%A7%E6%89%BF%E6%A0%91.html ,以避免陈旧错误知识的误导,同时有更好的阅读体验。
林德熙
2019/03/13
7930
WPF 控件继承树
WPF 控件继承树
----
林德熙
2018/09/19
1.1K0
WPF 控件继承树
常见选项卡内容切换+折叠+展开效果实现
1.选项卡效果预览 2.源码与简要说明 <!DOCTYPE html> 2 <html> 3 <head> 4 <meta charset="UTF-8"> 5
小蔚
2019/09/11
3.5K0
Windows11 展开折叠的右键菜单为传统模式
Windows 11 的新版右键菜单太影响效率了,实在不理解为什么要把那些常用项折叠起来,还是原版用的舒服
吴蛋蛋
2023/03/14
1.6K0
Windows11 展开折叠的右键菜单为传统模式
【 Flutter Unit 解牛篇 】代码折叠展开面板,怎么没有线?
FlutterUnit是【张风捷特烈】长期维护的一个Flutter集录、指南的开源App 如果你还未食用,可参见总汇集: 【 FlutterUnit 食用指南】 开源篇
张风捷特烈
2020/10/16
2K0
【 Flutter Unit 解牛篇 】代码折叠展开面板,怎么没有线?
【 Flutter Unit 解牛篇 】代码折叠展开面板,怎么没有线?
Flutter Unit 解牛篇 将对项目的一些实现点进行剖析。 很多朋友问我,你代码折叠面板怎么做的?ExpansionTile展开的线去不掉吧? 确实ExpansionTile展开上下会有线,
张风捷特烈
2020/04/30
1.6K0
【 Flutter Unit 解牛篇 】代码折叠展开面板,怎么没有线?
Element NavMenu 左侧菜单展开折叠Echart图表自适应父级Div
在NavMenu菜单切换展开折叠的时候,Div 是自适应的,但是如果页面含有Echart图表,需要特殊处理才能只适应父级Div的大小
tianyawhl
2020/03/17
2.3K0
与时间有关的树的展开实验
-- 建立递归树历史表,并生成数据 CREATE TABLE TREE_HIS ( ID NUMBER, C_CHILD VARCHAR2(32 BYTE), C_NAME VARCHAR2(100 BYTE), P_ID NUMBER, EFF_DATE DATE, EXP_DATE DATE ); CREATE INDEX IDX2 ON TREE_HIS (P_ID); CREATE UNIQU
用户1148526
2019/05/25
5360
1.TabActivity、视图树、动画
整个页面为TabActivity, 其中对TabWidget进行了一些改变,当切换页签时页签后面红色背景会以Translate动画形式移动到相对应的页签后。 布局 TabHost、TabWidget、FrameLayout的id必须是系统定义的, 因为可以直接get获取控件,上面的Tab标签一般不写原生的,自己写。 把原生的TabWidget隐藏,用了个垂直的LinearLayout写, 下面是FrameLayout,也是TabHost必须写的 <RelativeLayout xmlns:android=
六月的雨
2018/05/14
8010
UI自动化 --- UI Automation 基础详解
上一篇文章UI自动化 --- 微软UI Automation中,介绍了UI Automation能够做什么,且借助 Inspect.exe 工具完成了一个模拟点击操作的Demo,文章结尾也提出了自己的一些想法,想要借助UI Automation做一个UI自动化测试平台。想法毕竟是想法,还是得落地实践,一步一步来。
Niuery Diary
2023/10/22
4.2K0
UI自动化 --- UI Automation 基础详解
【Flutter】Android、Flutter 折叠屏适配 ( 展开大屏 | 折叠主屏 | 折叠副屏 | 静态展示 | 动态热切换适配 | 拉伸布局 | X 轴自适应适配 | 布局重构 )
B 中左右出现的黑边 , C 中上下出现黑边 , D 中四周出现黑边 , 都不能出现 ;
韩曙亮
2023/03/29
6.4K0
【Flutter】Android、Flutter 折叠屏适配 ( 展开大屏 | 折叠主屏 | 折叠副屏 | 静态展示 | 动态热切换适配 | 拉伸布局 | X 轴自适应适配 | 布局重构 )
点击加载更多

相似问题

WPF DataBound树视图展开/折叠

21

树视图展开折叠功能?

12

展开/折叠ttk树视图分支

13

在WPF中重用树视图的展开[+]和折叠[-]按钮

10

如何更改WPF中树视图中展开/折叠按钮的位置?

19
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档