Я пытаюсь понять, как решить эту проблему в WPF с использованием шаблона MVVM.
Я конвертирую элемент управления дерева win32 в WPF. Старый элемент управления дерева использует иерархию классов Node вдоль этих линий (BaseNode является базовым классом и каждый следующий элемент наследуется от него и немного расширяется):
BaseNode, GroupNode, VehicleNode, PersonNode, EquipmentNode, SupplyNodes (и т. Д. И т. Д.)
Исходя из этого, у GroupNode будет список дочерних узлов, которые могут быть одним или несколькими GroupNodes, одним или несколькими VehicleNodes и одним или несколькими PersonNodes.
VehicleNode будет иметь список PersonNode, который будет командой для управления транспортным средством. У VehicleNode также будет список PersonNode, которые будут пассажирами в транспортном средстве. Каждый из них находится под узлом «Пустышка» с надписью «Экипаж и пассажиры» (хотя оба они являются типами PersonNode).
Помимо этого, каждый из VehicleNode и PersonNode должен иметь узлы EquipmentNode и SupplyNodes.
В дереве будет несколько "групповых" узлов, которые будут расширены для перечисления любых элементов этого типа.
Надеюсь, эта текстовая диаграмма поможет решить проблему с иллюстрацией.
- Наземный флот (GroupNode)
- Западное побережье (GroupNode)
- Восточное побережье (GroupNode)
- Грузовик 1 (VehicleNode)
- Грузовик 2 (VehicleNode)
- Экипаж (DummyNode)
- Билл Водитель (PersonNode)
- Пассажиры (DummyNode)
- Пассажир 1 (PersonNode)
- Пассажир 2 (PersonNode)
- Оборудование (DummyNode)
- Камера (EquipmentNode)
- Солнцезащитные очки (EquipmentNode)
- Расходные материалы (DummyNode)
- Apple (SupplyNode)
- Бутылка для воды (SupplyNode)
- Оборудование (DummyNode)
- Джек (EquipmentNode)
- Шинный железо (EquipmentNode)
- Расходные материалы (DummyNode)
- Персонал (DummyNode)
- Продавец Том (PersonNode)
- Районный менеджер Салли (PersonNode)
Таким образом, экземпляр Truck 2 (VehicleNode) имеет шесть дочерних узлов (список базовых узлов) различных типов:
Список детей; // {Билл Водитель (PersonNode), Пассажир 1 (PersonNode), Пассажир 2 (PersonNode), Джек (EquipmentNode), Железо в шинах (EquipmentNode), SpareTire (SupplyNode)}
В нашем существующем дереве win32, когда мы добавляем узел Truck 2, мы вручную циклически перебираем дочерние узлы и добавляем фиктивные узлы (при необходимости) и дочерние элементы, чтобы создать дерево на основе типа узлов в списке дочерних элементов и потенциально свойство дочернего узла - у PersonNode есть флаг, указывающий, является ли он пассажиром или экипажем, поэтому мы знаем, к какому родительскому узлу его добавить.
Я борюсь с тем, как это можно представить в подходе MVVM к дереву, которое позволило бы нам сохранить фиктивные узлы, как указано выше.
Любая помощь будет принята с благодарностью!