我有这个上下文菜单资源:
<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>
我想在两个地方重复使用它。首先,我试图把它放在一个DataGrid:
<DataGrid ContextMenu="{DynamicResource FooContextMenu}">...
ContextMenu本身工作正常,但Executed="..."我现在有打破应用程序并抛出:
PresentationFramework.dll 中出现“System.InvalidCastException”类型的第一次机会异常
附加信息:无法将“System.Reflection.RuntimeEventInfo”类型的对象转换为“System.Reflection.MethodInfo”类型。
如果我删除整个Executed="..."定义,那么代码就可以工作(并且命令什么都不做/变灰)。只要我右键单击网格/打开上下文菜单,就会引发异常。
被DataGrid放置在几个元素下,但最终它们都位于已设置为 s 集合的TabControl(称为) 之下,并且我有一个我想要被调用的方法。MainTabsItemsSourceFooViewModelFooViewModelHelpExecuted
让我们形象化:
- 选项卡控件 (
ItemsSource=ObservableCollection<FooViewModel>,x:Name=MainTabs)- 网格
- 更多用户界面
- DataGrid(带有上下文菜单集)
- 更多用户界面
- 网格
为什么会出现此错误,如何使上下文菜单命令“定位” FooViewModel'sHelpExecuted方法?