c# WPF MVVM DataGrid MenuItem для строк и заголовка
Моё первое приложении в котором пытаюсь реализовать MVVM. Столкнулся с проблемой при написании приложения в котором пытаюсь реализовать отдельно ContextMenu для заголовков dataGrid и строк этой же datagrid.
<DataGrid x:Name="DataGridView" ItemsSource="{Binding TableDataWrapper}"
SelectedItem="{Binding CurrentSelectedFile, Mode=TwoWay}"
AutoGenerateColumns="False" SelectionChanged="SelectionChanged" IsSynchronizedWithCurrentItem="True" IsReadOnly="True"
<DataGrid.Resources>
<ContextMenu x:Key="HeaderMenu">
<MenuItem Header="headerMenu"/>
</ContextMenu>
<ContextMenu x:Key="RowMenu">
<MenuItem Header="Copy file path to clipboard" Command="{Binding CopyFilePathToClipboardCommand}" />
<Separator/>
<MenuItem Header="Delete seleted files"/>
</ContextMenu>
<Style TargetType="{x:Type DataGridColumnHeader}">
<Setter Property="ContextMenu" Value="{StaticResource HeaderMenu}"/>
</Style>
<Style TargetType="{x:Type DataGridRow}">
<Setter Property="ContextMenu" Value="{StaticResource RowMenu}"/>
</Style>
</DataGrid.Resources>
при вызове команды CopyFilePathToClipboardCommand получаю ошибку:
System.Windows.Data Error: 40 : BindingExpression path error: 'CopyFilePathToClipboardCommand' property not found on 'object' ''WavFile' (HashCode=45954822)'. BindingExpression:Path=CopyFilePathToClipboardCommand; DataItem='WavFile' (HashCode=45954822); target element is 'MenuItem' (Name=''); target property is 'Command' (type 'ICommand')
Реализовано вот так:
public ICommand CopyFilePathToClipboardCommand { get; set; }
CopyFilePathToClipboardCommand = new RelayCommand(CopyFilePathToClipboard, CanCopyFileToClipboard);
private void CopyFilePathToClipboard(object p)
{
System.Windows.Clipboard.SetText(CurrentSelectedFile.filePath);
}
private bool CanCopyFileToClipboard(object p)
{
if(TableDataWrapper!=null && !TableDataWrapper.IsEmpty)
{
return true;
}
else
{
return false;
}
}
При этом если вызвать команду через event, то всё работает:
private void CopyFileClick(object sender, RoutedEventArgs e)
{
((MainWindowViewModel)DataContext).CopyFilePathToClipboardCommand.Execute(((MenuItem)sender));
}
В сети много упоминаний про эту ошибку, в основном из-за DataBinding. У меня в этом проекте порядка 15 контролов с командами, они все работают. И в этом случае система также подсказывает команду при вводе. Помогите пожалуйста разобраться в чём может быть дело.