У меня есть модель представления, которая содержит коллекцию объектов и набор команд.
public class MainWindowVM : NotifyPropertyChangedBase
{
private CollectionViewSource employeeViewSource;
private ICommand cmdOpenDetailEmployee;
public MainWindowVM()
{
nsDataProviderEmployees = new NSDataProvider();
employeeViewSource = new CollectionViewSource();
cmdOpenDetailEmployee = new RelayCommand<object>((parameter) => {...});
this.LoadData();
}
public CollectionViewSource EmployeeViewSource => employeeViewSource;
public ICommand CmdOpenDetailEmployee => cmdOpenDetailEmployee;
}
В моем приложении я хочу использовать эту команду в контекстном меню таблицы данных, показывающей сотрудников.
<Window
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:local="clr-namespace:MyApp.UI"
xmlns:DataModel="clr-namespace:MyApp.DataModel;assembly=MyApp.DataModel" x:Class="MyApp.UI.MainWindow"
xmlns:vm="clr-namespace:MyApp.UI.ViewModels"
mc:Ignorable="d"
Title="MyApp - Main" Height="751.826" Width="1111.005" Loaded="Window_Loaded" Icon="Resources/MyApp.ico">
<Window.DataContext>
<vm:MainWindowVM />
</Window.DataContext>
<Grid x:Name="grdMain">
<DataGrid DataContext="{Binding Path=EmployeeViewSource}" x:Name="employeeDataGrid" EnableRowVirtualization="True" ItemsSource="{Binding}" Margin="10,77,10,0" RowDetailsVisibilityMode="VisibleWhenSelected">
<DataGrid.ContextMenu>
<ContextMenu DataContext="{Binding RelativeSource={RelativeSource Mode=FindAncestor, AncestorType={x:Type Window}}}">
<MenuItem Header="OpenDetail..."
Command="{Binding CmdOpenDetailEmployee}"
CommandParameter="{Binding}"/>
</ContextMenu>
</DataGrid.ContextMenu>
<DataGrid.Columns>...</DataGrid.Columns>
</DataGrid>
</Grid>
</Window>
Проблема в Я не могу найти комбинацию привязок, которые позволяют мне использовать свойство EmployeeViewSource
или мой ViewModel в качестве DataContext для сетки И свойство CmdOpenDetailEmployee
моей ViewModel как DataContext для моих ContextMenu и MenuItems.
Согласно всем сообщениям, которые я смог найти, это должно работать, но команда не выполняется, когда я щелкаю по пункту меню.