将多个分层数据模板分配给 TreeView ItemTemplate 的正确方法是啥?

Posted

技术标签:

【中文标题】将多个分层数据模板分配给 TreeView ItemTemplate 的正确方法是啥?【英文标题】:What is the proper method for assigning multiple hierarchicalDataTemplates to a TreeView ItemTemplate?将多个分层数据模板分配给 TreeView ItemTemplate 的正确方法是什么? 【发布时间】:2017-06-06 15:18:23 【问题描述】:

我有三个 XML HierarchicalDataTemplates。它们在运行时加载,然后分配给 TreeView.ItemTemplate。这是我大约六年前在一个类似项目中成功使用的代码。它不仅现在不能工作(原始项目仍然神秘地工作正常),而且坦率地说,我无法理解我六年前编写的代码或为什么它工作!这是代码 sn-p(OOB 是 TreeView):

       //This is for dynamically building a treeview with templates from an XML file
        XmlTextReader xmlReader1 = new XmlTextReader("HierarchicalDataTemplate1.xml");
        HierarchicalDataTemplate hierarchicalDataTemplate1 = XamlReader.Load(xmlReader1) as HierarchicalDataTemplate;

        XmlTextReader xmlReader2 = new XmlTextReader("HierarchicalDataTemplate2.xml");
        HierarchicalDataTemplate hierarchicalDataTemplate2 = XamlReader.Load(xmlReader2) as HierarchicalDataTemplate;
        hierarchicalDataTemplate1.ItemTemplate = hierarchicalDataTemplate2;

        XmlTextReader xmlReader3 = new XmlTextReader("HierarchicalDataTemplate3.xml");
        HierarchicalDataTemplate hierarchicalDataTemplate3 = XamlReader.Load(xmlReader3) as HierarchicalDataTemplate;
        hierarchicalDataTemplate2.ItemTemplate = hierarchicalDataTemplate3;

        OOB.ItemTemplate = hierarchicalDataTemplate1;

        Thread updateThread = new Thread(new ParameterizedThreadStart(UpdateTree));
        updateThread.Start(this);

TreeView (OOB) 正确显示前两级节点,但不能正确显示第三级。考虑到,我看不到第三个分层数据模板是如何分配给 OOB.ItemTemplate 的,这并不奇怪(嗯,令人惊讶的是为什么它在我六年前编写的代码中可以正常工作)。

谁能告诉我如何正确地将三个单独的 XML hierarchyDataTemplate 文件分配给 TreeView?谢谢!

【问题讨论】:

如果您有一个使用相同代码的工作解决方案和一个非工作解决方案,那么最好的方法可能是尝试将工作解决方案减少一步一步地工作。复制该工作解决方案并开始删除与新应用程序无关的任何内容 - 最后,您将拥有一些无法解释但至少可以用作新应用程序基础的东西,或者,很可能,您将首先找到使旧应用程序能够正常工作的缺失部分。 好吧,我已经完成了与差异程序的比较,相关部分似乎相同。我无法理解 hierarchicalDataTemplate3 是如何分配给 OOB.ItemTemplate 的。 差异是一回事。减少是另一个原因——它起作用的原因可能在于您认为不相关的那些部分。而hiearchicalDataTemplate3 似乎是在hierarchicalDataTemplate2.ItemTemplate = hierarchicalDataTemplate3; 中分配的。 对,但是在将hierarchicalDataTemplate3 分配给hierarchicalDataTemplate2 之后,hierarchicalDataTemplate2 是如何分配给OOB.ItemTemplate 的?这就是让我难过的地方。然而,这与我六年前编写的另一个(更大的)项目的代码副本和粘贴完全相同。 据我了解,您将OOBItemTemplate 设置为hierarchicalDataTemplate1,将ItemTemplate 设置为hierarchicalDataTemplate2,将ItemTemplate 设置为hierarchicalDataTemplate3。最后,OOB 具有在最低级别使用 hierarchicalDataTemplate3 的 ItemTemplate。对我来说这似乎很合理,尽管我的 WPF 随着时间的推移稍微生锈了。 【参考方案1】:

这不是问题。这是在使用 Xpath 设置 HierarchicalDataTemplate XML 文件的方式。

【讨论】:

以上是关于将多个分层数据模板分配给 TreeView ItemTemplate 的正确方法是啥?的主要内容,如果未能解决你的问题,请参考以下文章

重写TreeView模板来实现数据分层展示

重写TreeView模板来实现数据分层展示

为包含多个集合作为子节点的 TreeView 节点构建数据模板的正确方法是啥?

尝试将多个变量分配给刀片模板

WPF 自定义列表筛选 自定义TreeView模板 自定义ListBox模板

WPF中TreeView控件数据绑定和后台动态添加数据