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 контролов с командами, они все работают. И в этом случае система также подсказывает команду при вводе. Помогите пожалуйста разобраться в чём может быть дело.


Ответы (0 шт):