0

エクスプローラー タイプのビューを実装しています。左側は TreeView で、右側は左側で選択した項目の詳細ビュー/エディター ビューです。

TreeView には、さまざまな種類の「リーフ」オブジェクトが含まれています。オブジェクトの表示方法と表示するコンテキスト メニューを定義する HierarchialDataTemplates を定義しました。MenuItem には、ビューモデルにバインドされたコマンドがあります。

私が苦労しているのは、コマンド ハンドラーを実装する場所です。簡単な場所は「リーフ」ビューモデルにありますが、「エクスプローラー」ビューモデルと詳細/エディタービューを開く方法については何も知りません。

最も簡単な解決策は、アクションが最適に実行される場所であるため、リーフ コンテキスト メニューをエクスプローラ ビュー モデルにバインドすることです。

これは通常どのように処理されますか?「よく知られている」パターンはありますか?

4

1 に答える 1

1

この質問に対する答え - DataTemplate 内の親 DataContext へのバインド- が見つかりました。これにより、私は正しい方向に進みました。

UserControlget a name とコマンド バインディングは this - を参照しますSource={x:Reference uc}}

<UserControl x:Class="View.AdminWorkstationView" Name="uc">

<UserControl.Resources>
    <DataTemplate DataType="{x:Type vm:RequiredDeviceViewModel}">
        <DockPanel>
            <DockPanel.ContextMenu>
                <ContextMenu>
                    <MenuItem Command="{Binding DataContext.EditDeviceCommand, Source={x:Reference uc}}" 
                              CommandParameter="{Binding}"
                              Header="Edit device" />
                </ContextMenu>
            </DockPanel.ContextMenu>
        </DockPanel>
    </DataTemplate>

</UserControl.Resources>
于 2013-07-12T11:40:23.603 に答える