【发布时间】:2012-05-09 02:01:16
【问题描述】:
我有这个上下文菜单资源:
<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="..." 会破坏应用程序并抛出:
“System.InvalidCastException”类型的第一次机会异常 发生在 PresentationFramework.dll 中
附加信息:无法转换类型的对象 'System.Reflection.RuntimeEventInfo' 键入 'System.Reflection.MethodInfo'。
如果我删除整个 Executed="..." 定义,那么代码就可以工作(并且命令什么都不做/变灰)。只要我右键单击网格/打开上下文菜单,就会引发异常。
DataGrid 被放置在几个元素之下,但最终它们都位于TabControl(称为MainTabs)之下,其中ItemsSource 设置为FooViewModels 的集合,其中@987654332 @ 我有一个方法HelpExecuted 我想被调用。
让我们想象一下:
- TabControl (
ItemsSource=ObservableCollection<FooViewModel>,x:Name=MainTabs)- 网格
- 更多用户界面
- DataGrid(带有上下文菜单集)
- 更多用户界面
- 网格
为什么会出现此错误,如何使上下文菜单命令“定位”FooViewModel 的 HelpExecuted 方法?
【问题讨论】:
-
我认为 MainTabs 控件不包含 HelpExecuted 属性。它只包含一个 FooViewModel 列表。