WPF TreeView 数据绑定以隐藏/显示展开/折叠图标

2023-12-10

我实现了一个 WPF 按需加载树视图,如中所述this(非常好的)文章。 在上述解决方案中,使用虚拟元素来保留展开+图标/树视图项目行为。当用户单击扩展器时,虚拟项目将替换为真实数据。

我想通过添加属性来完善模型public bool HasChildren { get { ... } }在我的支持下TreeNodeViewModel.

问题:
如何绑定此属性以隐藏/显示展开图标(在 XAML 中)?我无法找到合适的触发器/设置器组合。
(INotifyPropertyChanged 已正确实现。)

我想使用我的财产public bool HasChildren instead使用虚拟元素。

确定一个项目是否有子项的成本有点高,但仍然比获取子项便宜得多。


Julian,

这是一个非常好的问题。为什么不尝试编写自己的树视图项呢? :) 我的意思是,不是从头开始,只是从现有的 TreeViewItem 派生并添加您的属性。我已经准备了一个快速示例,但您可以随意修改它(如果有些内容不完全清楚,请提出问题)。开始了:

public class TreeViewItem_CustomControl : TreeViewItem
{
    static TreeViewItem_CustomControl()
    {
        HasChildrenProperty = DependencyProperty.Register("HasChildren", typeof(Boolean), typeof(TreeViewItem_CustomControl));
    }

    static DependencyProperty HasChildrenProperty;

    public Boolean HasChildren
    {
        get
        {
            return (Boolean)base.GetValue(HasChildrenProperty);
        }

        set
        {
            if (value)
            {
                if (this.Items != null)
                {
                    this.Items.Add(String.Empty); //Dummy item
                }
            }
            else
            {
                if (this.Items != null)
                {
                    this.Items.Clear();
                }
            }

            base.SetValue(HasChildrenProperty, value);
        }

    }
}

这是您的自定义 TreeViewItem 的代码。现在让我们在 XAML 中使用它:

<TreeView>
    <TreeViewItem Header="qwer">
        Regulat tree view item.
    </TreeViewItem>
    <CustomTree:TreeViewItem_CustomControl x:Name="xyz" Header="temp header" Height="50">
        <TreeViewItem>Custom tree view item, which will be removed.</TreeViewItem>
    </CustomTree:TreeViewItem_CustomControl>
</TreeView>

如您所见,第一个项目是常规项目,第二个项目是您的自定义项目。请注意,它有一个孩子。接下来就可以绑定了有孩子ViewModel 中某个布尔对象的属性,或者只是通过将 HasChildren 设置为来测试我的自定义类False来自上述 XAML 背后的代码:

xyz.HasChildren = false;

现在,尽管您的元素有一个子元素,但未显示展开按钮,因此这意味着我的自定义类可以工作。

我希望我对您有所帮助,但如果您有任何疑问,请随时询问。

Piotr.

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

WPF TreeView 数据绑定以隐藏/显示展开/折叠图标 的相关文章

  • Mahapps 弹出窗口未与 caliburn.micro 一起出现

    我试图使用 mahapps 和 caliburn micro 在 wpf 中显示弹出窗口 不幸的是 弹出窗口的视图未得到解析 我得到的只是弹出窗口中显示的视图模型的类型名称 我需要根据 shell 中的 ActiveItem 显示弹出窗口
  • 全屏模式下的 XBAP

    我想以全屏模式运行 XBAP 有没有办法让IE全屏打开XBAP 由于我以完全信任的方式运行 每当用户单击全屏按钮时 我都会使用 Process Start 方法以 kiosk 模式打开 IE 以下代码解决了我的问题 Process Star
  • DataGridView 数据绑定到 List>

    给定代码 class Foo public string Value get set public int Id get set List
  • 以编程方式从 Generic.xaml 查找资源

    我正在尝试实施WPF 和 Silverlight 中的样式绑定 摘自本文 http www wintellect com cs blogs jprosise archive 2011 04 19 silverlight 5 s new st
  • 为什么这个 Microsoft.VisualStudio.Imaging.CrispImage 不显示任何内容?

    我正在尝试创建一个非常简单的 WPF 应用程序来实验 Visual Studio 的这个概念图像服务和目录 https msdn microsoft com en us library mt628927 aspx 我不明白为什么我似乎无法在
  • 如何将子属性的触发器设置为父属性?

    我有一个带有 ToggleButton ExpanderButton 的 TreeView 切换按钮有两个图像 一张用于展开 另一张用于未展开 但是 当我选择 TreeViewItem 时 我用不同的颜色突出显示它 并且我也想更改图像的颜色
  • MouseDoubleClick 事件不会冒泡

    我的场景经过简化 我有一个包含员工行的 ListView 在每个员工行中 都有 增加 和 减少 按钮来调整他的工资 假设在我的程序中 双击 员工 行意味着 解雇此人 The problem是当我快速单击 增加 时 这会触发 ListView
  • WPF Datagrid 组扩展文本 - 如何绑定?

    我正在使用带有组合框的数据网格 该组合框应该更改分组字段 我使用以下 xaml 来定义常规分组模板
  • 为什么在 WinForms 中可以跨线程添加控件,而在 WPF 中却不能?

    在虚拟 WinForms 应用程序中 我可以在设计时创建 ListBox 在运行时创建后台线程 然后从后台线程将控件添加到 ListBox 但如果我在 WPF 中执行相同的操作 则会出现错误 为什么我可以在 WinForms 中执行此操作
  • 在WPF中如何添加菜单项事件?

    在我的 WPF 应用程序中 我添加一个菜单 然后在其下添加几个菜单项 例如 我的菜单项之一是 Main Item 然后我在 Main Item 下添加subItem1 subItem2和subItem3 我想单击 subItem1 并执行某
  • 隐藏树视图列表中的节点。在 C# 中

    我正在使用 VS 2005 C 正在处理一个未完成的 WinForm 我已将 XML 解析为树视图列表 但遇到了一些问题 我想知道是否有一种方法可以隐藏 过滤 删除名称中包含 this text 的某个节点 而不必依赖文本框 这就是我对这个
  • 在 Composite WPF (Prism) 中,我应该如何对我的控制器进行单元测试?

    我正在使用一个模块构建一个基本的复合 WPF Shell 我想对我的模块进行单元测试 显然 Composite WPF 以一种易于单元测试的方式模块化我的代码 下面是我想要进行单元测试的代码 它驻留在我的模块的控制器中 请注意标准复合 WP
  • WPF XAML 定义的 MenuItem 重用开始工作,然后消失

    以下简单代码尝试在两个单独的菜单上重用 Window Resources 中定义的 MenuItem
  • 如何在不修改以前的文本的情况下更改 WPF RichTextBox 中的 FontFamily

    当您使用 RichTextBox 的 FontFamily 属性时 它会更改 FlowDocument 内整个内容的 FontFamily 就像执行 EditingCommands ToggleBold 这样的命令一样 它仅更改插入符号下的
  • WPF C# 输入框

    我正在使用 C 构建 WPF 应用程序 我想弹出一个对话框提示用户输入他 她的名字 之后 我将跟踪该名称并将一些数据保存到 txt使用该名称的文件 例如 输入的名称是姓名 约翰 所以我有数据数据 1 2 3 然后我将 数据 保存在John
  • WPF DataGrid 排序后滚动到顶部

    我有一个使用数据网格的 Net 4 0 WPF 应用程序 目前 按列排序后 网格的滚动位置保持在排序前的位置 对于此应用程序 我需要在任何排序后滚动到网格顶部 我尝试过像这样处理排序事件 Private Sub myDataGrid Sor
  • 获取颜色位置的深度,Kinect SDK

    我正在寻找方法 尽快 从 Kinect 相机获取颜色像素的相应深度 我找到了 MapDepthFrameToColorFrame 函数 但这只给我特定深度位置的颜色 我想要相反的颜色 我想要这个的原因是我将能够单击 RGB 图像上的某个位置
  • 如何使用 linq 通过主键组合三个对象列表

    我正在尝试合并 3 个对象列表 我有一个人员列表 地址列表和地址关系列表 我想将这些列表组合成一个按 person id 排序的新列表 将其用作列表视图的数据源 然后能够访问 aspx 页面中的属性 这可能吗 Roughly using S
  • MVVM 焦点到文本框

    我如何将焦点集中在TextBox没有指定名称TextBox 目前我正在做以下事情
  • EntityFramework 6.0.0.0 读取数据,但不插入

    我创建了一个基于服务的数据库 folderName gt Add New Item gt Data gt Service based Database文件到 WPF 应用程序中 然后我用过Database First方法并创建了Person

随机推荐

  • 似乎在 中不起作用,仅提交最后一个条目

    我有一个
  • 使用 SQL 中修改的关系复制同一个表中的数据

    我们需要将数据从一家公司复制到另一家公司 为此我们需要将一个表中存在的所有数据复制到同一个表中 但具有不同的公司 ID 表 1 员工 FName Id Department CatId CompanyId Pratik 1 1 4 1 Pr
  • 仅删除某些请求的安全性 wso2 api 管理器

    是否可以使用 WSO2 API 管理器版本 3 删除我的 api 列表中某些特定请求的安全性 例如 我有以下请求 customer post products get customer address get 就我而言 我不需要安全 pro
  • 如何使用 Stripes Framework 在 Web 浏览器中显示 JFreeChart

    情况是这样的 我的 metrics jsp 页面提交了创建图表所需的几个变量 ProjectActionBean java 调用一些其他创建 JFreeChart 的 java 类 我可以在弹出窗口中显示图表 但我希望它显示在原始浏览器窗口
  • 如何在不设置顶部和底部的情况下设置左右CSS属性

    有什么办法可以只设置左右 边距 填充 边框宽度等 为相同的值根本不需要设置顶部和底部 用一种表达方式 而不是 my class name margin left 2px margin right 2px 对于属性 如果我希望左侧和右侧具有相
  • 在 Linux CentOS 6.3 上安装 R 时出现问题

    在 Linux CentOS 6 3 上安装 R 时 我得到以下信息 Error Package R core 3 0 1 2 el6 x86 64 epel Requires libjpeg so 62 LIBJPEG 6 2 64bit
  • 如何在 Vaadin 10 组合框中添加语言标志

    如何在 Vaadin 10 Como 框中添加语言标志 您可以使用comboBox setRenderer 构建您自己的将要使用的布局 comboBox setRenderer new ComponentRenderer
  • 具有相同簇大小的 K 均值算法变体

    我正在寻找最快的算法 用于按距离将地图上的点分组为大小相等的组 这k 均值聚类算法看起来简单且有前途 但不能产生同等规模的群体 该算法是否有一种变体 或者是否有一种不同的算法可以允许所有集群的成员数量相等 也可以看看 将 n 个点分组到 k
  • MongoDB 无法确定表达式错误的序列化信息

    我的数据具有以下结构 public enum ParamType Integer 1 String 2 Boolean 3 Double 4 public class Gateway public int id get set public
  • 清除Android的本地通知cordova插件

    I use 适用于 Android 的 Phonegap 本地通知插件显示特定日期的通知 我使用 Cordova 2 2 我使用 cordova 的升级教程修改插件 显示通知 但当我单击它时 应用程序未打开且通知未清除 我怎样才能解决这个问
  • 动态改变自定义seekBar的LinearGradient颜色比率

    我创建了一个带有自定义的搜索栏LinearGradient可绘制的 但是 我希望能够更改每种颜色的渐变比例 这里我使用 3 种颜色 如果满足以下条件 它们会均匀分布positions is null 事实上 我想要的是为每种颜色提供宽度或比
  • 如何从 weblogic 12.2.1 禁用 Jersey

    Weblogic 12 2 1内部有Jersey 2 21 1作为JAX RS 2 0的实现 但我们想使用Jersey 2 5 1或最新版本的Jersey 解决冲突的一般方法是在配置文件中定义类以从应用程序加载类 但是当你升级weblogi
  • 类模板的别名

    考虑一个别名模板 例如A在下面的代码中 现在让B是以下的别名模板A 在下面的代码中 这些类模板用作结构的模板参数C它仅专门用于一种类型名称 A clang std c 11存在于error implicit instantiation of
  • BOM 随机出现在 JSON 回复中

    我正在使用 JSON 和 cURL 实现两个服务器之间的通信 问题是 有时 JSON 回复中的开括号之前会附加 BOM 字节顺序标记 我已经设法修剪它并成功解析 JSON 字符串 但考虑到 JSON 是由我自己的代码生成的 我不知道该 BO
  • 在R中,如何在将对象发送到函数后获取对象的名称?

    我正在寻找相反的get 给定一个对象名称 我希望直接从该对象中提取代表该对象的字符串 简单的例子foo是我正在寻找的函数的占位符 z lt data frame x 1 10 y 1 10 test lt function a mean x
  • 收到 org.postgresql.util.PGobject 类型的对象

    我可以从代码中将几何数据插入数据库 但只能使用 SQL 编辑器 例如 PGAdmin III 查询数据 我无法将几何数据检索回我的代码 每次尝试都会以 已接收类型为 org postgresql util PGobject 的对象 结束 即
  • 如何在 iOS 中以编程方式添加 UITabBarItem 的标识符类型?

    我想在 iOS 中以编程方式添加 UITabBarItem 在界面生成器中 我们可以轻松选择搜索 收藏夹 最近选项卡等标识符 我想知道如何以编程方式添加这些标识符类型 您将其添加为 UIViewController 属性吗 你创建一个UIT
  • 如何捕获 ASP.NET 应用程序中未处理的异常?

    在一次 NET考试中我遇到了这个问题 您可以使用以下哪项来捕获应用程序中未处理的异常 服务器错误 页面错误 应用程序错误 响应错误 错误事件 我知道它的Application Error 但我想知道的是其他的是什么 通过一些谷歌搜索 我发现
  • 无法从我自己的 angularjs api 获取 JSONP 数据

    我正在尝试从我自己的 api 获取数据 但无法成功将数据获取到 vegdata 变量 这是控制器代码 scope filterText null scope vegdata scope init function url http 192
  • WPF TreeView 数据绑定以隐藏/显示展开/折叠图标

    我实现了一个 WPF 按需加载树视图 如中所述this 非常好的 文章 在上述解决方案中 使用虚拟元素来保留展开 图标 树视图项目行为 当用户单击扩展器时 虚拟项目将替换为真实数据 我想通过添加属性来完善模型public bool HasC