動的コンテキストメニューを構築しています。それを実現するために、私は、私のコンテキストメニューを表しカスタムのviewmodelを思い付くこのように定義されています:CommandParameterを所有オブジェクトのプロパティにバインドします。
public class ContextMenuVM {
public object ContextItem { get; set; }
public ObservableCollection<ICommand> Items { get; private set; }
}
プロパティをItems
は、コンテキストメニューに表示するために効果的なコマンドを保持し、プロパティContextItem
、そのコンテキスト・アイテムを保持していますこれらのコマンドは実行されます。
さらに、私は私のさまざまなコマンドとその実装をすべて保持するシングルトンクラスを持っています。
ContextMenu.Items.Clear();
ContextMenu.Items.Add(SingletonClass.Instance.CommandA);
if (condition)
ContextMenu.Items.Add(SingletonClass.Instance.CommandB);
XAMLでのContextMenu iteselfこのように定義されています:
<ContextMenu ItemsSource="{Binding Path=ContextMenu.Items}">
<ContextMenu.ItemTemplate>
<DataTemplate>
<ContentControl>
<MenuItem Command="{Binding}" CommandParameter="what-goes-here?" />
</ContentControl>
</DataTemplate>
</ContextMenu.ItemTemplate>
</ContextMenu>
だから、最終的にはこのような何かをしてコンテキストメニューを所有しているのviewmodelに
UpdateContextMenu
と呼ばれる方法があるでしょう
私が達成できないのは、CommandParameter
バインディングが機能するようにすることです。 ContextMenuVM
インスタンスのContextItem
プロパティにバインドする方法を教えてください。