Wpf 具有多个子项的层次树

Wpf 具有多个子项的层次树,wpf,mvvm,tree,hierarchicaldatatemplate,Wpf,Mvvm,Tree,Hierarchicaldatatemplate,我正试图思考如何使用MVVM模式在WPF中解决这个问题 我正在将win32树控件转换为WPF。old tree控件沿以下几行使用节点类层次结构(BaseNode是基类,下面的每个项继承自它并略微扩展): BaseNode、GroupNode、VehicleNode、PersonNode、EquipmentNode、SupplyNodes(等) 由此,GroupNode将有一个子节点列表,这些子节点可以是一个或多个GroupNodes、一个或多个VehicleNodes和一个或多个PersonNo

我正试图思考如何使用MVVM模式在WPF中解决这个问题

我正在将win32树控件转换为WPF。old tree控件沿以下几行使用节点类层次结构(BaseNode是基类,下面的每个项继承自它并略微扩展): BaseNode、GroupNode、VehicleNode、PersonNode、EquipmentNode、SupplyNodes(等)

由此,GroupNode将有一个子节点列表,这些子节点可以是一个或多个GroupNodes、一个或多个VehicleNodes和一个或多个PersonNodes

VehicleNode将有一个人员节点列表,这些人员节点将是操作车辆的乘员。VehicleNode还将包含车辆中乘客的PersonNodes列表。每一个都在一个“虚拟”节点下,标记为乘员和乘客(尽管它们都是PersonNode类型)

除此之外,VehicleNode和PersonNode将分别具有EquipmentNode和SupplyNode

树将有几个“组”节点,这些节点将被展开以列出该类型的任何项目

希望这个文本图能帮助解决这个问题

  • 地面舰队(GroupNode)
    • 西海岸(GroupNode)
    • 东海岸(GroupNode)
      • 卡车1(车辆节点)
      • 卡车2(车辆节点)
        • 船员(DummyNode)
          • 向驱动程序开票(PersonNode)
        • 乘客(DummyNode)
          • 乘客1(个人节点)
          • 乘客2(个人节点)
            • 设备(DummyNode)
              • 摄像机(设备节点)
              • 太阳镜(设备节点)
            • 用品(DummyNode)
              • 苹果(SupplyNode)
              • 水瓶(SupplyNode)
          • 设备(DummyNode)
            • 千斤顶(设备节点)
            • 轮胎铁(设备节点)
          • 用品(DummyNode)
            • SpareTire(供应节点)
      • 人员(DummyNode)
        • 销售员汤姆(个人节点)
        • 地区经理Sally(人事节点)
因此,Truck 2(VehicleNode)的实例有六个子节点(BaseNodes列表),它们的类型不同: 列出子项;//{向驾驶员(PersonNode)、乘客1(PersonNode)、乘客2(PersonNode)、千斤顶(EquipmentNode)、轮胎熨斗(EquipmentNode)、备件(SupplyNode)开具账单。}

在我们现有的win32树中,当我们添加Truck 2节点时,我们手动循环子节点,并添加虚拟节点(根据需要)和子节点,以根据子节点列表中的节点类型以及子节点上的潜在属性创建树-PersonNode上有一个标志,指示其是乘客还是乘员,所以我们知道添加它应该属于哪个父节点

我正在努力研究如何在树上用MVVM方法来表示这一点,这样我们就可以像上面那样保留虚拟节点

任何帮助都将不胜感激

使用,请参阅一个适当的示例

您将公开ViewModel中的节点列表,并将其绑定到TreeView的ItemsSource。每个节点还将有一个子属性,该属性是另一个节点列表

如果需要在每个节点上放置ICommands/Actions/Methods,那么每个节点都可以是一个简单的类,或者实际上可以是ViewModels本身

每个节点都可以按照您的意愿在ViewModel中的C#中进行设置,因为HierarchycalDataTemplate为您做了大量绑定工作。

使用,请参见一个合适的示例

您将公开ViewModel中的节点列表,并将其绑定到TreeView的ItemsSource。每个节点还将有一个子属性,该属性是另一个节点列表

如果需要在每个节点上放置ICommands/Actions/Methods,那么每个节点都可以是一个简单的类,或者实际上可以是ViewModels本身


每个节点都可以按照您的意愿在ViewModel中的C#中进行设置,因为Hierarchy-CalDataTemplate为您做了大量绑定工作。

I不理解问题…I不理解问题…这似乎可行-我不知道Hierarchy-data模板可能有子模板。谢谢如果这解决了您的问题,您应该将其标记为“回答/投票”。似乎这会起作用-我不知道分层数据模板可能有子模板。谢谢如果这解决了您的问题,您应该将其标记为“回答/向上投票”。