派生オブジェクトのリストにバインドすることで、XAML またはコードで手動でメニューを作成する必要がないようにしたいと考えていICommand
ます。MenuItem
ただし、結果のメニューに 2 つのレベルのメニュー項目がある (つまり、それぞれが に含まれているMenuItem
)という問題が少し発生しています。
私の推測では、これは WPF がバインディング用に自動的に を生成しているために発生していると思われますが、MenuItem
実際に使用している「ビューアー」は既にですMenuItem
(から派生していMenuItem
ます):
<ContextMenu
x:Name="selectionContextMenu"
ItemsSource="{Binding Source={x:Static OrangeNote:Note.MultiCommands}}"
ItemContainerStyleSelector="{StaticResource separatorStyleSelector}">
<ContextMenu.ItemTemplate>
<DataTemplate>
<Viewers:NoteCommandMenuItemViewer
CommandParameter="{Binding Source={x:Static OrangeNote:App.Screen}, Path=SelectedNotes}" />
</DataTemplate>
</ContextMenu.ItemTemplate>
</ContextMenu>
(ItemContainerStyleSelector はhttp://bea.stollnitz.com/blog/?p=23Separator
からのもので、バインドされたソース内に要素を含めることができます。)
したがって、メニューは のコレクションにバインドされ、ICommand
各アイテムCommandParameter
は同じグローバル ターゲットに設定されます (たまたまコレクションですが、それは重要ではありません)。
私の質問は、WPF が各項目を自動的にラップしないようにバインドできる方法はありますMenuItem
か?