Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/wpf/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# DataGrid上下文菜单事件未触发_C#_Wpf_Mvvm - Fatal编程技术网

C# DataGrid上下文菜单事件未触发

C# DataGrid上下文菜单事件未触发,c#,wpf,mvvm,C#,Wpf,Mvvm,这就是我所拥有的: <window> <Window.Resources> <DataTemplate DataType="{x:Type viewModel:LogsViewModel}" > <DataGrid Name="MainLogDataGrid" ItemsSource="{Binding MainLogDataGrid}"> <DataGrid.

这就是我所拥有的:

<window>
<Window.Resources>        
    <DataTemplate DataType="{x:Type viewModel:LogsViewModel}" >
                            <DataGrid Name="MainLogDataGrid" ItemsSource="{Binding MainLogDataGrid}">

<DataGrid.ContextMenu>
<ContextMenu Name="MainGridContextMenu" >
<i:Interaction.Triggers>
<i:EventTrigger EventName="MouseLeftButtonUp" >
<i:InvokeCommandAction Command="{Binding OnMainDataGridContextMenuChange}" 
                 CommandParameter="{Binding ElementName=MainGridContextMenu, Path=PlacementTarget}" /> 
</i:EventTrigger>
</i:Interaction.Triggers>
<MenuItem Header="Insert Row" Name="InsertRowMenuItem" TabIndex="0" />
</ContextMenu>
</DataGrid.ContextMenu>
</DataGrid>

<DataTemplate DataType="{x:Type viewModel:ReportsViewModel}">
    <Label FontSize="50">THIS IS WHERE THE REPORTS GO</Label>
</DataTemplate>
</Window.Resources>
</Window>
<ContentControl  Content="{Binding CurrentPageViewModel}" />


    class LogsViewModel : ObservableObject, IViewModel
    {
        public RelayCommand<object> OnMainDataGridContextMenuChange { get; private set; }

        public LogsViewModel()
        {
            OnMainDataGridContextMenuChange = new RelayCommand<object>(MainGridContextMenuItemChange);

        }

        private void MainGridContextMenuItemChange(object menuItem)
        {
            var item = menuItem as MenuItem;
        }
}
问题是始终无法访问MainGridContextMenuItemChange方法。这可能与上下文菜单没有看到LogsViewModel DataContext有关吗?我怎样才能把它挂上?谢谢。

试试这个

 <ContextMenu Name="MainGridContextMenu"  DataContext="{Binding PlacementTarget.DataContext, RelativeSource={RelativeSource Mode=Self}}">
ContextMenu不是LogicalTree的一部分,因此它无法从父级继承DataContext。但是ContextMenu确实有属性PlacementTarget,我们可以使用它通过绑定获取DataGrid的DataContext,如上所示

设置ContextMenu的DataContext的第二个选项是


谢谢你的建议。它正在标记此语句:PlacementTarget.DataContext。它表示无法解析System.Windows.UIElement类型的数据上下文中的属性“DataContext”。它编译了,但事件仍然没有触发。它标记的是哪条语句?为了简化此过程,删除了所有DataTemplate和DataControl内容。所以我只有一个简单的带有上下文菜单的DataGrid,但仍然不走运。
 <ContextMenu Name="MainGridContextMenu" DataContext="{Binding DataContext, Source={x:Reference MainLogDataGrid}}">