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