私はこのコンテキストメニューリソースを持っています:
<ResourceDictionary xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
<ContextMenu x:Key="FooContextMenu">
<ContextMenu.CommandBindings>
<CommandBinding Command="Help" Executed="{Binding ElementName=MainTabs, Path=HelpExecuted}" />
</ContextMenu.CommandBindings>
<MenuItem Command="Help">
<MenuItem.Icon>
<Image Source="../Resources/Icons/Help.png" Stretch="None" />
</MenuItem.Icon>
</MenuItem>
</ContextMenu>
</ResourceDictionary>
2か所で再利用したいです。まず、私はそれを:に入れようとしていDataGrid
ます:
<DataGrid ContextMenu="{DynamicResource FooContextMenu}">...
それContextMenu
自体は正常に動作しますが、Executed="..."
私は今、アプリケーションを壊してスローします:
タイプ'System.InvalidCastException'の最初のチャンスの例外がPresentationFramework.dllで発生しました
追加情報:タイプ「System.Reflection.RuntimeEventInfo」のオブジェクトをタイプ「System.Reflection.MethodInfo」にキャストできません。
定義全体を削除するExecuted="..."
と、コードは機能します(そして、コマンドは何もしない/グレー表示されます)。グリッドを右クリックしてコンテキストメニューを開くとすぐに例外がスローされます。
はDataGrid
いくつかの要素の下に配置されますが、最終的にはすべてがsのコレクションに設定されたTabControl
(と呼ばれるMainTabs
)の下にあり、呼び出したいメソッドがあります。ItemsSource
FooViewModel
FooViewModel
HelpExecuted
視覚化しましょう:
- TabControl(
ItemsSource=ObservableCollection<FooViewModel>
、x:Name=MainTabs
)- グリッド
- その他のUI
- DataGrid(コンテキストメニューが設定されている)
- その他のUI
- グリッド
なぜこのエラーが発生するのですか?また、コンテキストメニューコマンドでFooViewModel
のHelpExecuted
メソッドを「ターゲット」にするにはどうすればよいですか?