TreeView 不显示存储在数据中的子项

2024-02-18

在我的程序中我有一个TreeView具有数据支持(视图模型和数据模型)。添加到的每个项目TreeView添加一个子项,但由于某种原因,子项在运行时没有反映。但是,我可以在调试期间看到孩子们以及我的“孩子”属性TreeView's数据模型包括NotifyPropertyChange在它的设置器中。

注意:之前我遇到过类似的问题,新添加的节点(这些子节点的父节点)也不会显示。此问题已通过设置纠正DisplayMemberPath="DisplayName.Value"在树的 xaml 中。

TreeView's xaml:

TreeView ItemsSource="{Binding UserControl_DataModel.TreeViewViewModel.ObservableCollection<TreeViewDataModel>}" DisplayMemberPath="DisplayName.Value".../>

这是创建新节点并将其添加到的位置TreeView(树视图视图模型):

private TreeViewDataModel createNewNode(StringItem nodeName)
{
    var newNode = new TreeViewDataModel ()
    {
        DisplayName = nodeName
    };

    newNode.Children.Add(new TreeViewDataModel () { DisplayName = nodeName});

    return newNode;
}

public void addNewLocNode(StringItem nodeName)
{
    TreeObservableCollection.Add(createNewNode(nodeName));
}

Note: StringItem是一个自定义类。在StringItem, Value返回项目的字符串值。 (前任:StringItem.Value)

TreeViewDataModel 中的 Children 属性:

public ObservableCollection<TreeViewDataModel> Children
{
    get { return _children ?? (_children = new ObservableCollection<TreeViewDataModel>()); }
    set
    {
        _children = value;
        NotifyPropertyChange(() => Children);
    }
}

为什么子节点没有出现在我的TreeView,我该如何解决这个问题?


你没有足够的代码让我确切地知道你是如何设置的。我试图让它与你已有的相似。我想你应该能够弄清楚。

截屏:

XAML:

<Window x:Class="WpfApplication9.MainWindow"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:app="clr-namespace:WpfApplication9"
    Title="MainWindow" Height="350" Width="525">
<Grid>
    <TreeView ItemsSource="{Binding TreeObservableCollection}"> <!-- DisplayMemberPath="DisplayName.Value" - Can't set both DisplayMemberPath and ItemTemplate -->
        <TreeView.ItemTemplate>
            <HierarchicalDataTemplate DataType="{x:Type app:TreeViewDataModel}" ItemsSource="{Binding Children}">
                <StackPanel Orientation="Horizontal">
                    <TextBlock Text="{Binding DisplayName.Value}" />
                </StackPanel>
            </HierarchicalDataTemplate>
        </TreeView.ItemTemplate>
    </TreeView>
</Grid>

CODE:

using System;
using System.Collections.Generic;
using System.Collections.ObjectModel;
using System.Linq;
using System.Text;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Data;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Imaging;
using System.Windows.Navigation;
using System.Windows.Shapes;

namespace WpfApplication9
{
    /// <summary>
    /// Interaction logic for MainWindow.xaml
    /// </summary>
    public partial class MainWindow : Window
    {
        public ObservableCollection<TreeViewDataModel> TreeObservableCollection { get; set; }

        public MainWindow()
        {
            InitializeComponent();
            TreeObservableCollection = new ObservableCollection<TreeViewDataModel>();
            this.DataContext = this;
            this.Loaded += MainWindow_Loaded;
        }
        void MainWindow_Loaded(object sender, RoutedEventArgs e)
        {
            addNewLocNode(new StringItem("A"));
            addNewLocNode(new StringItem("B"));
            addNewLocNode(new StringItem("C"));
            addNewLocNode(new StringItem("D"));
        }
        private TreeViewDataModel createNewNode(StringItem nodeName)
        {
            var newNode = new TreeViewDataModel()
            {
                DisplayName = nodeName
            };
            newNode.Children.Add(new TreeViewDataModel() { DisplayName = nodeName });
            return newNode;
        }

        public void addNewLocNode(StringItem nodeName)
        {
            TreeObservableCollection.Add(createNewNode(nodeName));
        }
    }
    public class StringItem
    {
        public string Value { get; set; }
        public StringItem(string val)
        {
            Value = val;
        }
    }
    public class TreeViewDataModel : System.ComponentModel.INotifyPropertyChanged
    {
        public StringItem DisplayName { get; set; }
        private ObservableCollection<TreeViewDataModel> _children;
        public ObservableCollection<TreeViewDataModel> Children
        {
            get { return _children ?? (_children = new ObservableCollection<TreeViewDataModel>()); }
            set
            {
                _children = value;
                NotifyPropertyChange("Children");
            }
        }
        private void NotifyPropertyChange(string name)
        {
            if (PropertyChanged != null)
                PropertyChanged(this, new System.ComponentModel.PropertyChangedEventArgs(name));
        }
        #region INotifyPropertyChanged Members

        public event System.ComponentModel.PropertyChangedEventHandler PropertyChanged;

        #endregion
    }
}

Alt-way:

<Window x:Class="WpfApplication9.MainWindow"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:app="clr-namespace:WpfApplication9"
    Title="MainWindow" Height="350" Width="525">
<Window.Resources>
    <HierarchicalDataTemplate DataType="{x:Type app:TreeViewDataModel}" ItemsSource="{Binding Children}">
        <TextBlock Text="{Binding DisplayName.Value}" />
    </HierarchicalDataTemplate>
</Window.Resources>
<Grid>
    <TreeView ItemsSource="{Binding TreeObservableCollection}" />
</Grid>
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

TreeView 不显示存储在数据中的子项 的相关文章

  • 我的线程图像生成应用程序如何将其数据传输到 GUI?

    Mandelbrot 生成器的缓慢多精度实现 线程化 使用 POSIX 线程 Gtk 图形用户界面 我有点失落了 这是我第一次尝试编写线程程序 我实际上并没有尝试转换它的单线程版本 只是尝试实现基本框架 到目前为止它是如何工作的简要描述 M
  • 为什么我不能用 `= delete;` 声明纯虚函数?

    Intro 纯虚函数使用通用语法声明 virtual f 0 然而 自 c 11 以来 有一种方法可以显式地传达non existence 特殊 成员函数的 Mystruct delete eg default constructor Q
  • 以编程方式检查页面是否需要基于 web.config 设置进行身份验证

    我想知道是否有一种方法可以检查页面是否需要基于 web config 设置进行身份验证 基本上如果有这样的节点
  • 如何创建可以像 UserControl 一样编辑的 TabPage 子类?

    我想创建一个包含一些控件的 TabPage 子类 并且我想通过设计器来控制这些控件的布局和属性 但是 如果我在设计器中打开子类 我将无法像在 UserControl 上那样定位它们 我不想创建一个带有 UserControl 实例的 Tab
  • 构造函数中显式关键字的使用

    我试图了解 C 中显式关键字的用法 并查看了这个问题C 中的explicit关键字是什么意思 https stackoverflow com questions 121162 但是 那里列出的示例 实际上是前两个答案 对于用法并不是很清楚
  • 对齐 GridView 中的行值

    我需要在 asp net 3 5 中右对齐 gridview 列中的值 我怎样才能做到这一点
  • 如何配置 WebService 返回 ArrayList 而不是 Array?

    我有一个在 jax ws 上实现的 java Web 服务 此 Web 服务返回用户的通用列表 它运行得很好 Stateless name AdminToolSessionEJB RemoteBinding jndiBinding Admi
  • ASP MVC:服务应该返回 IQueryable 的吗?

    你怎么认为 你的 DAO 应该返回一个 IQueryable 以便在你的控制器中使用它吗 不 您的控制器根本不应该处理任何复杂的逻辑 保持苗条身材 模型 而不是 DAO 应该将控制器返回给视图所需的所有内容 我认为在控制器类中看到查询 甚至
  • 当前的 c++ 工作草案与当前标准有何不同

    通过搜索该标准的 PDF 版本 我最终找到了这个链接C 标准措辞草案 http www open std org jtc1 sc22 wg21 docs papers 2012 n3376 pdf从 2011 年开始 我意识到我可以购买最终
  • 如何将 WPF 大小转换为物理像素?

    将 WPF 与分辨率无关 宽度和高度转换为物理屏幕像素的最佳方法是什么 我正在 WinForms 表单中显示 WPF 内容 通过 ElementHost 并尝试制定一些大小调整逻辑 当操作系统以默认 96 dpi 运行时 我可以正常工作 但
  • 如何重置捕获像素的值

    我正在尝试创建一个 C 函数 该函数返回屏幕截图位图中每四个像素的 R G 和 B 值 这是我的代码的一部分 for int ix 4 ix lt 1366 ix ix 4 x x 4 for int iy 3 iy lt 768 iy i
  • 通过 NHibernate 进行查询,无需 N+1 - 包含示例

    我有一个 N 1 问题 我不知道如何解决它 可以在这个问题的底部找到完全可重复的样本 因此 如果您愿意 请创建数据库 设置 NUnit 测试和所有附带的类 并尝试在本地消除 N 1 这是我遇到的真实问题的匿名版本 众所周知 这段代码对于帮助
  • 获取 2 个数据集 c# 中的差异

    我正在编写一个简短的算法 它必须比较两个数据集 以便可以进一步处理两者之间的差异 我尝试通过合并这两个数据集并将结果更改放入新的数据集来实现此目标 我的方法如下所示 private DataSet ComputateDiff DataSet
  • 在类的所有方法之前运行一个方法

    在 C 3 或 4 中可以做到这一点吗 也许有一些反思 class Magic RunBeforeAll public void BaseMethod runs BaseMethod before being executed public
  • 当前的 x86 架构是否支持非临时加载(来自“正常”内存)?

    我知道有关此主题的多个问题 但是 我没有看到任何明确的答案或任何基准测量 因此 我创建了一个处理两个整数数组的简单程序 第一个数组a非常大 64 MB 第二个数组b很小 无法放入 L1 缓存 程序迭代a并将其元素添加到相应的元素中b在模块化
  • 结构体指针的动态数组

    我必须使用以下代码块来完成学校作业 严格不进行任何修改 typedef struct char firstName char lastName int id float mark pStudentRecord pStudentRecord
  • 转到定义:“无法导航到插入符号下的符号。”

    这个问题的答案是社区努力 help privileges edit community wiki 编辑现有答案以改进这篇文章 目前不接受新的答案或互动 我今天突然开始在我的项目中遇到一个问题 单击 转到定义 会出现一个奇怪的错误 无法导航到
  • 使用 C# 从 DateTime 获取日期

    愚蠢的问题 给定日期时间中的日期 我知道它是星期二 例如我如何知道它的 tue 2 和 mon 1 等 Thanks 您正在寻找星期几 http msdn microsoft com en us library system datetim
  • 带重定向标准流的 C# + telnet 进程立即退出

    我正在尝试用 C 做一个 脚本化 telnet 项目 有点类似于Tcl期望 http expect nist gov 我需要为其启动 telnet 进程并重定向 和处理 其 stdin stdout 流 问题是 生成的 telnet 进程在
  • 错误:无效使用不完整类型“类 Move”/未定义对 Move::NONE 的引用

    拜托 我不知道为什么这个简单的代码被拒绝 它给了我 2 个编译错误 请帮帮我 I use 代码 块 20 03 我的编译器是GNU GCC 移动 hpp class Move public Move Move int int public

随机推荐

  • 在 SQL 中选择连续数字

    这感觉很简单 但我在任何地方都找不到答案 我正在尝试按一天中的每个小时运行查询 所以我正在做一个Group By在小时部分 但并非所有小时都有数据 因此存在一些间隙 我想每小时显示一次 无论是否有数据 这是一个示例查询 SELECT DAT
  • 使用 unison 同步包含 git 存储库的目录

    我想在两台机器上同步包含我的点文件的 git 存储库的目录 两台机器都会对存储库中的文件进行更改 通常我使用一致来同步目录 但在这种情况下 文件在 git即使目录内容表面上相同 目录也会有所不同 Unison见状举手退出 unison do
  • 纤维与异步等待

    我正在加入一个 C 项目 其中开发人员大量使用Fibers https en wikipedia org wiki Fiber computer science 在这个项目之前我什至没有听说过它们并且以前使用过async await and
  • 重复消息之间的时间间隔

    根据 SQS 的文档 重点是我的 Amazon SQS 将消息副本存储在多个服务器上 以实现冗余和高可用性 在极少数情况下 当您接收或删除邮件时 存储邮件副本的服务器之一可能不可用 如果发生这种情况 该消息的副本将不会在该不可用的服务器上被
  • 如何在Spring Cloud Netflix eureka上注册Spring Boot微服务?

    我们计划使用 Spring Cloud Netflix oss 组件 所以我正在做一个小样本项目 我开发了 2 个 Spring 微服务 这些服务运行良好http localhost 9000 microsvc one http local
  • MySQL数据导出变化次数

    我有一些用于数据库的备份和恢复脚本 该表有一个时间戳字段 备份脚本如下所示 mysqldump u user ppass database tab fields terminated by skip comments table 它创建两个
  • Django SECURE_SSL_REDIRECT 和 301 HTTP 响应

    在与本地不同的环境中 我设置DJ SSL REDIRECT True对于我的 Django 项目 但现在 当我在另一个环境 例如 在 Travis CI 中 中运行时 与 REST API 端点相关的所有单元测试都失败了 发生的情况是所有
  • InkCanvas 的撤消/重做命令堆栈

    我正在使用 InkCanvas 创建类似绘画的应用程序 我愿意实现撤消 和我的应用程序中的重做功能 哪种是为 InkCanvas 实现撤消 重做的最佳方法 我已经为 WPF 应用程序实现了撤消 重做 并最终将我的撤消 重做代码发布到http
  • 完成 GeneratorDataset 迭代器时发生错误:已取消:操作已取消

    在运行具有使用tensorflow 2 0的代码的kubeflow管道时 每个纪元结束时显示以下错误 W tensorflow core kernels data generator dataset op cc 103 完成 Generat
  • 如何修复这个 ES6 模块循环依赖?

    编辑 有关更多背景 另请参阅ES 讨论 讨论 https esdiscuss org topic how to solve this basic es6 module circular dependency problem 我有三个模块A
  • 删除级联时不触发触发器

    我有一个名为 player instance 的表 然后是一个名为 penalties 的表 其中有一个引用player instance的外键 我还有一个名为 分数 的表 我有一个关于处罚的删除触发器 这样如果删除一行 那么它将改变分数中
  • 使用 GCM 向多个 Android 设备发送推送通知

    我正在关注http javapapers com android google cloud messaging gcm for android and push notifications http javapapers com andro
  • 改造 2 @path 与 @query

    我是 Retrofit 2 库的新手 作为初学者 我阅读了几篇文章来入门 并且我设法从我的 RESTful API 获取 XML 数据而不指定参数 在我的方法中 生成的 XML 资源如下 GET Path foods Produces Me
  • 将 NumPy 数组转换为 Python 列表

    我如何转换NumPy http en wikipedia org wiki NumPy数组到Python列表 Use tolist https numpy org doc stable reference generated numpy n
  • 我可以将 Partials 导入到 SASS 中的 Partials 中吗?

    我正在使用 Sass 设计一个新网站 最初 我的 style scss 编译的主 SCSS 文件 导入了 generic scss 我在其中定义了变量 和各个页面 例如 homepage scss 效果很好 然后我尝试重构 homepage
  • 到 MSMQ 还是不到 MSMQ? (或 SQL 表作为队列)

    我有一个分布式系统 其中有 1 个 SQL Server 1 n 个处理服务器和 1 n 个数据提供者 网络上的硬件设备 提供的数据在进入关系数据库结构之前需要进行处理 由处理服务器执行 作为 Windows 服务 net 代码来解析数据
  • Excel公式如何连接字符串以供外部参考

    假设我在单元格中有以下公式 该公式从另一个工作簿读取单元格的值 c temp external book xlsx SheetX E 4 我想要的值c temp external book xlsx SheetX来自此工作表中的另一个单元格
  • 使用 Python 进行 Google-Forms 响应?

    我正在尝试编写一个 Python 脚本 它可以在 Google 表单中提交响应 如下所示 https docs google com forms d 152CTd4VY9pRvLfeACOf6SmmtFAp1CL750Sx72Rh6HJ8
  • 删除 GitLab 中的版本

    我在 GitLab 中发布的版本有问题 我在我的项目中用标签创建了它们 现在我想删除它们 所以我删除了关联的标签 但我的版本始终显示 我在 Google 和 Stack Overflow 上搜索 但找不到任何解决方案 如何删除这些没有标签的
  • TreeView 不显示存储在数据中的子项

    在我的程序中我有一个TreeView具有数据支持 视图模型和数据模型 添加到的每个项目TreeView添加一个子项 但由于某种原因 子项在运行时没有反映 但是 我可以在调试期间看到孩子们以及我的 孩子 属性TreeView s数据模型包括N