2

MVVMパターンを使用してWPFでこの問題を解決する方法に頭を悩ませようとしています。

win32 ツリー コントロールを WPF に変換しています。古いツリー コントロールは、これらの行に沿って Node クラス階層を使用します (BaseNode は基本クラスであり、それに続く各項目はそれから継承され、わずかに拡張されます): BaseNode、GroupNode、VehicleNode、PersonNode、EquipmentNode、SupplyNodes (など)。

これから、GroupNode は、1 つ以上の GroupNode、1 つ以上の VehicleNode、および 1 つ以上の PersonNode である子ノードのリストを持ちます。

VehicleNode には、車両を操作する乗組員となる PersonNodes のリストがあります。VehicleNode には、車両の乗客である PersonNodes のリストも含まれます。これらはそれぞれ、Crew と Passengers というラベルの付いた「ダミー」ノードの下にあります (ただし、どちらも PersonNode タイプです)。

これ以外では、VehicleNode と PersonNode はそれぞれ EquipmentNode と SupplyNode を持ちます。

ツリーにはいくつかの「グループ」ノードがあり、展開するとそのタイプの項目が一覧表示されます。

願わくば、このテキスト図が問題の解決に役立つことを願っています。

  • 地上艦隊 (GroupNode)
    • 西海岸 (GroupNode)
    • 東海岸 (GroupNode)
      • トラック 1 (VehicleNode)
      • トラック 2 (VehicleNode)
        • 乗組員 (DummyNode)
          • ドライバーに請求する (PersonNode)
        • 乗客 (DummyNode)
          • 乗客 1 (PersonNode)
          • 乗客 2 (PersonNode)
            • 装備品(ダミーノード)
              • カメラ (EquipmentNode)
              • サングラス (EquipmentNode)
            • 備品(ダミーノード)
              • アップル(サプライノード)
              • 水筒 (SupplyNode)
          • 装備品(ダミーノード)
            • ジャック (EquipmentNode)
            • タイヤ鉄 (EquipmentNode)
          • 備品(ダミーノード)
            • スペアタイヤ (SupplyNode)
      • 人事(ダミーノード)
        • セールスマン トム (PersonNode)
        • 地区マネージャーのサリー (PersonNode)
したがって、トラック 2 (VehicleNode) のインスタンスには、さまざまなタイプの 6 つの子ノード (BaseNodes のリスト) があります。// {Bill The Driver(PersonNode), Passenger 1 (PersonNode), Passenger 2 (PersonNode), Jack (EquipmentNode), Tire Iron (EquipmentNode), SpareTire (SupplyNode)}

既存の win32 ツリーでは、Truck 2 ノードを追加するときに、子ノードを手動で循環させ、ダミー ノード (必要に応じて) と子を追加して、子リスト内のノードのタイプと、場合によってはプロパティに基づいてツリーを作成します。子ノード - PersonNode には、乗客か乗務員かを示すフラグがあるため、追加する親ノードがどの親ノードに属するかがわかります。

上記のようにダミーノードを保持できるツリー上のMVVMアプローチでこれを表現する方法に苦労しています。

どんな助けでも大歓迎です!

4

1 に答える 1

0

HierarchicalDataTemplateを使用します。ここで適切な例を参照してください。

ViewModelからノードのリストを公開し、それをTreeViewのItemsSourceにバインドします。各ノードには、ノードの別のリストである子プロパティもあります。

各ノードは単純なクラスである場合もあれば、各ノードにICommands / Actions/Methodsを配置する必要がある場合は実際にはViewModels自体である場合もあります。

HierarchicalDataTemplateは多くのバインディング作業を行うため、各ノードはViewModelのC#で任意にセットアップできます。

于 2011-09-27T23:30:15.750 に答える