Tôi có này tài nguyên menu ngữ cảnh:Làm thế nào để thực hiện các lệnh để sử dụng các phương thức tổ tiên trong WPF?
<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>
Tôi muốn tái sử dụng nó ở hai nơi. Trước hết tôi đang cố gắng để đặt nó trong một DataGrid
:
<DataGrid ContextMenu="{DynamicResource FooContextMenu}">...
Các ContextMenu
bản thân hoạt động tốt, nhưng với sự Executed="..."
ngay bây giờ tôi đã phá vỡ ứng dụng và ném:
Một cơ hội ngoại lệ đầu tiên của gõ 'System.InvalidCastException' xảy ra trong PresentationFramework.dll
Thông tin bổ sung: Không thể truyền đối tượng loại 'System.Reflection.RuntimeEventInfo' để nhập 'System.Reflection.MethodInfo'.
Nếu tôi xóa toàn bộ định nghĩa Executed="..."
, thì mã hoạt động (và lệnh không làm gì/xám). Ngoại lệ được ném ngay sau khi tôi nhấp chuột phải vào lưới/mở menu ngữ cảnh.
Các DataGrid
được đặt dưới một vài yếu tố, nhưng cuối cùng tất cả họ đều dưới một TabControl
(gọi tắt là MainTabs
) trong đó có ItemsSource
thiết lập để một bộ sưu tập của FooViewModel
s, và trong FooViewModel
rằng tôi có một phương pháp HelpExecuted
mà tôi muốn trở thành gọi là.
Hãy hình dung:
- TabControl (
ItemsSource=ObservableCollection<FooViewModel>
,x:Name=MainTabs
)- Lưới
- More UI
- DataGrid (với thiết lập menu ngữ cảnh)
- More UI
- Lưới
Tại sao tôi nhận được lỗi này và làm thế nào tôi có thể làm cho lệnh menu ngữ cảnh để "mục tiêu" HelpExecuted
phương pháp 's FooViewModel
?
Tôi nghĩ điều khiển MainTabs không chứa thuộc tính HelpExecuted. Nó chỉ chứa một danh sách các FooViewModel. –