1

私は現在2つのテーブルを持っています。

Project
    int Number
    string Name
    List<WorkOrder> WorkOrders

WorkOrder
    int Number
    DateTime Date
    Project Project

Projects を表示する ListView と、MVVM と単一のビューモデルを使用して接続された WorkOrders を表示する DataGrid を使用して、マスター/詳細ビューを含む WPF ウィンドウがあります。すべてうまくいっていますが、同僚がいくつかの変更を加えたいと思っています。WorkOrder 番号の最初の桁は、材料の種類に対応します。つまり、1 = 木材、2 = スチール、3 = プラスチックです。彼らは、詳細ビューを絞り込むために、プロジェクト リストにマテリアル カテゴリを含めたいと考えています。

Projects
 - 8888 - Some Project
   - Wood
   - Metal
   - Plastic
 - 9999 - Another Project
   - Wood
   - Metal
   - Plastic

データにないものにデータバインドする方法がわかりません。TreeView を作成し、HierarchicalDataTemplate の Converter を使用してマテリアル ノードを埋めましたが、ViewModel 内で何が選択されているかを確認するために ViewModel にバインドするものはありません。これが理にかなっていることを願っています。返信ありがとうございます。

4

1 に答える 1

0

MVVM を使用する場合、ビューに必要なすべてのデータをビュー モデルに配置する必要があります。マテリアルの選択を表すマテリアルのコレクションを に追加したとおっしゃいましたTreeView...そのコレクション プロパティをビュー モデルに配置すると仮定しています。

ここで行う必要があるのは、プロパティからオブジェクトのTreeView.SelectedItemプロパティへのリンクを追加することだけです。WorkOrderこれにより、ユーザーがマテリアルを選択したときに、プロパティへのバインドによってオブジェクトTreeView.SelectedItemの関連するプロパティが更新されますWorkOrder

「数字の最初の桁WorkOrderは素材の種類に対応する」とも言いました...バインドを使用する場合は、これを変更する必要があるため、オブジェクトに type の新しいプロパティを追加MaterialWorkOrderます。WorkOrder次に、そのプロパティ (タイプのすべてのインスタンス) をプロパティにバインドできますTreeView.SelectedItem

于 2013-08-13T11:33:28.570 に答える