/ /ユーザーがコンテキストメニュー項目を定義できるようにする - wpf

ユーザーがコンテキストメニュー項目を定義できるようにする - wpf

私はこのクラスのユーザがメニューコンテキスト項目を定義できるようにしようとしています。異なるユースケースでは、異なるコンテキストメニュー項目を公開する必要があります。

ソースXAML

<Grid>
<DataGrid>
<DataGrid.Columns>
...
</DataGrid.Columns>
<DataGrid.ContextMenu>
<ContextMenu
Visibility="{Binding SelectedItem, Converter={SomeConverter}}">
</ContextMenu>
</DataGrid.ContextMenu>
</DataGrid>
</Grid>

どのように私はそれを使用したい:

<x:MyCollectionControl>
<MenuItems>
<MenuItem Header="Do Something"
Visibility="Collapsed" />
<MenuItem Header="Do Something Else"
Visibility="{Binding SomeCondition}" />
</MenuItems>
</x:MyCollectionControl>

コンテキストメニュー項目を公開するためにコントロールまたはビューモデルに追加する必要があるものは、コントロールを使用する場所で定義することができますか?

回答:

回答№1は1

ContextMenuのItemsSourceをViewModelのコレクションプロパティにバインドさせることができます。

あなたのすべてのViewModelが特定のインターフェース(あなた自身)から継承していると仮定すると、アイテムを持っているかどうか(ContextMenuを無効にするため)、このコレクションにゲッターを実装できます。

他にはもっと具体的にする必要があります。


回答№2の場合は0

もちろん、私はこれを投稿してから約5分後に修復しました。

コントロールコードに以下を追加しました。

  [DesignerSerializationVisibility(DesignerSerializationVisibility.Content)]
public ItemCollection MenuItems => MyCollectionDataGrid.ContextMenu?.Items;

コントロールを参照するためにこれを使用しました。

<trade1:MyCollectionControl x:Name="SomeDataGrid">
<trade1:MyCollectionControl.MenuItems>
<MenuItem Header="Do Something"
Visibility="Collapsed" />
<MenuItem Header="Do Something Else"
Visibility="{Binding SomeCondition}" />
</trade1:MyCollectionControl.MenuItems>
</trade1:MyCollectionControl>