我试图围绕如何使用MVVM模式解决WPF中的这个问题。
我正在将win32树控件转换为WPF。旧树控件沿着这些行使用Node类层次结构(BaseNode是基类,并且每个后续项继承自它并略微扩展): BaseNode,GroupNode,VehicleNode,PersonNode,EquipmentNode,SupplyNodes(等等)
从这里开始,GroupNode将有一个子节点列表,可以是一个或多个GroupNode,一个或多个VehicleNode以及一个或多个PersonNode。
VehicleNode将有一个PersonNode列表,这些PersonNode将成为操作车辆的工作人员。 VehicleNode还将具有将成为车辆中的乘客的PersonNode列表。其中每一个都在一个标记为船员和乘客的“虚拟”节点下(尽管它们都是PersonNode类型)。
除此之外,VehicleNode和PersonNode都将拥有EquipmentNodes和SupplyNodes。
树将有几个“组”节点,这些节点将被展开以列出该类型的任何项目。
希望这个文本图有助于解决问题。
在我们现有的win32树中,当我们添加Truck 2节点时,我们手动循环子节点并添加虚节点(根据需要)和子节点,根据子节点列表中的节点类型创建树可能是子节点上的一个属性 - PersonNode上有一个标志,表明它是乘客还是乘员,所以我们知道要添加它的哪个父节点属于。
我正在努力解决如何在树上的MVVM方法中表示这种方法,这样我们就可以保留上面的虚拟节点。
非常感谢任何帮助!
答案 0 :(得分:0)
使用HierarchicalDataTemplate,请参阅一个不错的示例here。
您将从ViewModel公开节点列表,并将其绑定到TreeView的ItemsSource。每个节点还有一个子属性,它是另一个节点列表。
如果需要在每个节点上放置ICommands / Actions / Methods,每个节点都可以只是一个简单的类,或者实际上可能是ViewModels。
您可以在ViewModel的C#中设置每个节点,因为HierarchicalDataTemplate会为您完成很多绑定工作。