将对象绑定到 WPF TreeView

2023-11-29

我想知道如何将自定义数据类型绑定到TreeView.

数据类型基本上是包含其他数组列表的对象数组列表。访问看起来像这样:

foreach (DeviceGroup dg in system.deviceGroups)
    {
        foreach (DeviceType dt in dg.deviceTypes)
        {
            foreach (DeviceInstance di in dt.deviceInstances)
            {

            }
        }
    }

我想要TreeView看起来像这样:

设备组1

 --> DeviceType1
      --DeviceInstance1
      --DeviceInstance2
 --> DeviceType2
      --DeviceInstance1

设备组2

 --> DeviceType1
      --DeviceInstance1
 --> DeviceType2

好的,这就是HierarchicalDataTemplate会拯救你的。诀窍是您将需要使用两个不同的层次结构模板,因为这里有一个三级层次结构。我构建了一个简单的UserControl为了显示。首先,这里是一些创建模型数据的隐藏代码,类似于您所拥有的:

public partial class ThreeLevelTreeView : UserControl
{
    public ArrayList DeviceGroups { get; private set; }

    public ThreeLevelTreeView()
    {
        DeviceInstance inst1 = new DeviceInstance() { Name = "Instance1" };
        DeviceInstance inst2 = new DeviceInstance() { Name = "Instance2" };
        DeviceInstance inst3 = new DeviceInstance() { Name = "Instance3" };
        DeviceInstance inst4 = new DeviceInstance() { Name = "Instance4" };

        DeviceType type1 = new DeviceType() { Name = "Type1", DeviceInstances = new ArrayList() { inst1, inst2 } };
        DeviceType type2 = new DeviceType() { Name = "Type2", DeviceInstances = new ArrayList() { inst3 } };
        DeviceType type3 = new DeviceType() { Name = "Type3", DeviceInstances = new ArrayList() { inst4 } };
        DeviceType type4 = new DeviceType() { Name = "Type4" };

        DeviceGroup group1 = new DeviceGroup() { Name = "Group1", DeviceTypes = new ArrayList() { type1, type2 } };
        DeviceGroup group2 = new DeviceGroup() { Name = "Group2", DeviceTypes = new ArrayList() { type3, type4 } };

        DeviceGroups = new ArrayList() { group1, group2 };

        InitializeComponent();
    }
}

public class DeviceGroup
{
    public string Name { get; set; }
    public ArrayList DeviceTypes { get; set; }
}

public class DeviceType
{
    public string Name { get; set; }
    public ArrayList DeviceInstances { get; set; }
}

public class DeviceInstance
{
    public string Name { get; set; }
}

这里没什么困难,但请注意你应该使用ObservableCollection代替ArrayList如果您想动态添加和删除集合。现在让我们看看该控件的 XAML:

<UserControl x:Class="TestWpfApplication.ThreeLevelTreeView"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:local="clr-namespace:TestWpfApplication"
DataContext="{Binding RelativeSource={RelativeSource Self}}">
<TreeView ItemsSource="{Binding DeviceGroups}">
    <TreeView.ItemTemplate>
        <HierarchicalDataTemplate ItemsSource="{Binding DeviceTypes}">
            <HierarchicalDataTemplate.ItemTemplate>
                <HierarchicalDataTemplate ItemsSource="{Binding DeviceInstances}">
                    <TextBlock Text="{Binding Name}"/>
                </HierarchicalDataTemplate>
            </HierarchicalDataTemplate.ItemTemplate>
            <TextBlock Text="{Binding Name}"/>
        </HierarchicalDataTemplate>
    </TreeView.ItemTemplate>
</TreeView>

这是结果:

替代文本http://img684.imageshack.us/img684/6281/ Threeleveltreeview.png

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

将对象绑定到 WPF TreeView 的相关文章

  • 调用 McAfee 病毒扫描引擎

    我收到客户的请求 要求使用他们服务器上的 McAfee 病毒扫描将病毒扫描集成到应用程序中 我做了一些调查 发现 McScan32 dll 是主要的扫描引擎 它导出各种看起来有用的函数 我还发现提到了 McAfee Scan Engine
  • 机器Epsilon精度差异

    我正在尝试计算 C 中双精度数和浮点数的机器 epsilon 值 作为学校作业的一部分 我在 Windows 7 64 位中使用 Cygwin 代码如下 include
  • C++11 删除重写方法

    Preface 这是一个关于最佳实践的问题 涉及 C 11 中引入的删除运算符的新含义 当应用于覆盖继承父类的虚拟方法的子类时 背景 根据标准 引用的第一个用例是明确禁止调用某些类型的函数 否则转换将是隐式的 例如最新版本第 8 4 3 节
  • 如何在 C++ 中标记字符串?

    Java有一个方便的分割方法 String str The quick brown fox String results str split 在 C 中是否有一种简单的方法可以做到这一点 The 增强分词器 http www boost o
  • 用于 FTP 的文件系统观察器

    我怎样才能实现FileSystemWatcherFTP 位置 在 C 中 这个想法是 每当 FTP 位置添加任何内容时 我都希望将其复制到我的本地计算机 任何想法都会有所帮助 这是我之前问题的后续使用 NET 进行选择性 FTP 下载 ht
  • 对类 static constexpr 结构的未定义引用,g++ 与 clang

    这是我的代码 a cp p struct int2 int x y struct Foo static constexpr int bar1 1 static constexpr int2 bar2 1 2 int foo1 return
  • WPF 数据绑定到复合类模式?

    我是第一次尝试 WPF 并且正在努力解决如何将控件绑定到使用其他对象的组合构建的类 例如 如果我有一个由两个单独的类组成的类 Comp 为了清楚起见 请注意省略的各种元素 class One int first int second cla
  • 重载 (c)begin/(c)end

    我试图超载 c begin c end类的函数 以便能够调用 C 11 基于范围的 for 循环 它在大多数情况下都有效 但我无法理解和解决其中一个问题 for auto const point fProjectData gt getPoi
  • 方程“a + bx = c + dy”的积分解

    在等式中a bx c dy 所有变量都是整数 a b c and d是已知的 我如何找到整体解决方案x and y 如果我的想法是正确的 将会有无限多个解 由最小公倍数分隔b and d 但我只需要一个解决方案 我可以计算其余的 这是一个例
  • ASP.NET Core 3.1登录后如何获取用户信息

    我试图在登录 ASP NET Core 3 1 后获取用户信息 如姓名 电子邮件 id 等信息 这是我在登录操作中的代码 var claims new List
  • VisualStateManager 和生成的转换

    正当我以为我明白的时候VisualStateManager 有些事情证明我错了 我正在使用 WPF 4 并且尝试简单地在鼠标悬停时放大某个项目 并在鼠标离开时将其缩小 我想我只需定义每个状态VisualStateGroup然后指定一个Vis
  • 两个静态变量同名(两个不同的文件),并在任何其他文件中 extern 其中一个

    在一个文件中将变量声明为 static 并在另一个文件中进行 extern 声明 我认为这会在链接时出现错误 因为 extern 变量不会在任何对象中看到 因为在其他文件中声明的变量带有限定符 static 但不知何故 链接器 瑞萨 没有显
  • 两个类可以使用 C++ 互相查看吗?

    所以我有一个 A 类 我想在其中调用一些 B 类函数 所以我包括 b h 但是 在 B 类中 我想调用 A 类函数 如果我包含 a h 它最终会陷入无限循环 对吗 我能做什么呢 仅将成员函数声明放在头文件 h 中 并将成员函数定义放在实现文
  • 如何在 Linq to SQL 中使用distinct 和 group by

    我正在尝试将以下 sql 转换为 Linq 2 SQL select groupId count distinct userId from processroundissueinstance group by groupId 这是我的代码
  • 编译时展开 for 循环内的模板参数?

    维基百科 here http en wikipedia org wiki Template metaprogramming Compile time code optimization 给出了 for 循环的编译时展开 我想知道我们是否可以
  • 有没有办法让 doxygen 自动处理未记录的 C 代码?

    通常它会忽略未记录的 C 文件 但我想测试 Callgraph 功能 例如 您知道在不更改 C 文件的情况下解决此问题的方法吗 设置变量EXTRACT ALL YES在你的 Doxyfile 中
  • C# 中的 IPC 机制 - 用法和最佳实践

    不久前我在 Win32 代码中使用了 IPC 临界区 事件和信号量 NET环境下场景如何 是否有任何教程解释所有可用选项以及何时使用以及为什么 微软最近在IPC方面的东西是Windows 通信基础 http en wikipedia org
  • 为什么 std::uint32_t 与 uint32_t 不同?

    我对 C 有点陌生 我有一个编码作业 很多文件已经完成 但我注意到 VS2012 似乎有以下语句的问题 typedef std uint32 t identifier 不过 似乎将其更改为 typedef uint32 t identifi
  • DotNetZip:如何提取文件,但忽略zip文件中的路径?

    尝试将文件提取到给定文件夹 忽略 zip 文件中的路径 但似乎没有办法 考虑到其中实现的所有其他好东西 这似乎是一个相当基本的要求 我缺少什么 代码是 using Ionic Zip ZipFile zf Ionic Zip ZipFile
  • 类型或命名空间“MyNamespace”不存在等

    我有通常的类型或命名空间名称不存在错误 除了我引用了程序集 using 语句没有显示为不正确 并且我引用的类是公共的 事实上 我在不同的解决方案中引用并使用相同的程序集来执行相同的操作 并且效果很好 顺便说一句 这是VS2010 有人有什么

随机推荐

  • 如何访问共享点库中的自定义列 - 图形 API

    我使用自定义列将子项列出在文档库的根目录中 当我使用 MS graph REST API 进行以下调用时 不会为子项返回任何自定义列数据 https graph microsoft com beta sites
  • Android 4.4 (KitKat) 上的 Android Gallery 返回 Intent.ACTION_GET_CONTENT 的不同 URI

    在 KitKat 之前 或者在新 Gallery 之前 Intent ACTION GET CONTENT返回一个像这样的 URI 内容 媒体 外部 图像 媒体 3951 使用ContentResolver并查询MediaStore Ima
  • 未导航到本机反应中的特定屏幕

    我是原生反应新手 我创建了两个文件 Browse js 和 Drawer js 我在 Browse js 中有一些按钮 但是当我在 Drawer js 中完成完整的 Browse js 时 像这样 gt import React Compo
  • 添加与 Ruby Gem Mailboxer 的所属关系

    我正在构建一个电子商务应用程序 并希望实现诸如消息传递系统之类的东西 在应用程序中 所有对话都将与Product模型或Order模型 在这种情况下 我想将相关对象 类型 id 我想 存储到Conversation object 要添加字段
  • 是否可以声明一个包含另一个常量数组的常量数组?

    我想做这样的事情 const MyFirstConstArray array 0 1 of string Hi Foo MySecondConstArrayWhichIncludesTheFirstOne array 0 2 of stri
  • 在 core_cm4.h 上为什么有类似 ((uint32_t)(int32_t)IRQn) 的转换?

    在 core cm4 h 的以下代码中 为什么存在双重转换 uint32 t int32 t IRQn 例如在以下函数中 STATIC INLINE void NVIC EnableIRQ IRQn Type IRQn NVIC gt IS
  • 如何根据 swing 中的 JPanel(table) 行数增加 JFrame 大小

    我有 Swing 应用程序 它执行以下操作 public void init jFrame new JFrame jFrame add sortingDataInputComponent asComponent jFrame setDefa
  • 如何在 ttk.OptionMenu 周围制作边框

    在尝试制作入口框架时 我遇到了一个问题 我无法在 ttk OptionMenu 周围制作边框以使其看起来与 ttk Entry 相似 图中是相邻的两个 制作选项菜单 option ttk OptionMenu bottom containe
  • DatabaseMetaData.getColumns 返回同义词的空结果集

    方法getColumns 元数据上的同义词返回空结果集 对于表和视图 它正确返回列列表 这种情况发生在 Oracle 11g Express 并使用最新的 Oracle JDBC 驱动程序 11 2 3 上 其他 SQL 服务器也会发生这种
  • 我们如何在 SwiftUI 中访问 List 的 DisclosureGroup?

    我使用此代码在 SwiftUI 2 0 和 macOs 10 15 7 的列表中显示我的父母和孩子数据 默认情况下 我的父母处于折叠状态 我喜欢强制其中一些通过我的按钮操作进行扩展 我有那个按钮 有谁知道如何解决这个问题 这是我的代码 im
  • 设置 DAY_OF_WEEK 返回意外结果

    我想将给定日历实例的时间戳设置为一周的开始 星期一 相反 它返回一个看似完全不相关的时间戳 除非我在这样做之前访问日历的任何字段 我在下面提供了一个示例 另请参阅此可运行示例Ideone 这是预期的行为吗 这背后的逻辑是什么 是的 我听说过
  • !important 已覆盖

    我正在使用 JQuery mobile 我希望我的应用程序上的所有文本都是紫色的 我这样做了 color 7A68AE important in my body我的 CSS 部分 然后我尝试在 firebug 中调试它并注意到我的 impo
  • PHP DomDocument 更改条件注释

    我有这个带有条件注释的 html 文件
  • 在搜索结果中显示整行

    在 Visual Studio Code vscode 中 当我搜索某些内容时 每个搜索结果中的行开头可能会被切断 怎样才能看到被剪掉的部分呢 例如 假设我搜索 directory 搜索结果可能会显示以下内容 require directo
  • 如何期待 Robotium 中的异常?

    这是我的测试用例 public void testStartActivityWithoutExtraData try getActivity Assert fail Should have thrown IllegalStateExcept
  • perl删除连续的重复行

    我想删除连续的重复行 即例如 test txt car speed is good bike slower than car plane super fast super fast bullet train super fast 这将删除除
  • Firebase 数据库结构

    我目前正在为 iOS 创建一个电子商务应用程序 但我无法决定如何为用户通过 关键字 搜索项目的场景构建数据库 我不确定存储关键字数组或仅存储该项目的关键字字符串是否会更好 如果大家有什么建议请告诉我 谢谢 这是我现在的单个项目的结构 ite
  • Ajax.BeginForm 导致重定向到部分视图而不是就地视图

    我的 Search cshtml 有一个名为 search results 的 div 需要更新 SearchResults 是操作名称 我已经在 MVC2 VS2008 项目上做过很多次了 但这是我第一次使用 MVC3 和 VS2010
  • AI Platform 中的 PyTorch 模型部署

    我正在 Google Cloud AI Platform 中部署 Pytorch 模型 出现以下错误 ERROR gcloud beta ai platform versions create Create Version failed B
  • 将对象绑定到 WPF TreeView

    我想知道如何将自定义数据类型绑定到TreeView 数据类型基本上是包含其他数组列表的对象数组列表 访问看起来像这样 foreach DeviceGroup dg in system deviceGroups foreach DeviceT