Wpf DataGrid绑定命令到单元格单击

Wpf DataGrid绑定命令到单元格单击,wpf,binding,datagrid,triggers,Wpf,Binding,Datagrid,Triggers,这里有一个简单的问题。我的DataGrid如下所示: <DataGrid ItemsSource="{Binding Path=Sections}" AutoGenerateColumns="False"> <DataGrid.Columns> <DataGridTextColumn Binding="{Binding Path=ImportName, Mode=OneWay}" Header="Imported" />

这里有一个简单的问题。我的DataGrid如下所示:

<DataGrid ItemsSource="{Binding Path=Sections}" AutoGenerateColumns="False">
    <DataGrid.Columns>
        <DataGridTextColumn Binding="{Binding Path=ImportName, Mode=OneWay}" Header="Imported" />
        <DataGridTextColumn Binding="{Binding Path=FoundName, Mode=TwoWay}" Header="Suggested" />
    </DataGrid.Columns>
</DataGrid>

我想将“建议的”列单元格绑定到我的VM中的一个命令,这样每当用户单击单元格进行编辑时,我的命令就会执行并为用户显示一个对话框。对于这里描述的类似问题,我找到了一个有趣的解决方案:


我喜欢这样一个事实,即它从XAML管理这一点,而不需要任何附加到单元格编辑事件的代码。不幸的是,我不知道如何转换它,使我能够将命令绑定到特定列中的单元格,而不是整行。对此有何建议?

您可以使用
DataGrid
控件中的
beginingedit
事件来处理此场景。此事件将在行或单元格进入编辑模式之前激发。您可以从EventArgs中标识所选列。 例如:

private void dgName_BeginningEdit(object sender, DataGridBeginningEditEventArgs e)
        {
            if (e.Column.Header.ToString() == "Suggested")
            {
                //Do Operation
            }
        }
如果您使用的是MVVM模式,那么可以选择将EventArgs传递给VM。如果您使用的是MVVMLight Toolkit,则有一个名为
PassEventArgs
的选项,并将其设置为
TRUE

在VM中

//中继命令

private RelayCommand<DataGridBeginningEditEventArgs> _cellBeginningEditCommand;
    public RelayCommand<DataGridBeginningEditEventArgs> CellBeginningEditCommand
    {
        get
        {
            return _cellBeginningEditCommand ?? (_cellBeginningEditCommand = new RelayCommand<DataGridBeginningEditEventArgs>(CellBeginningEditMethod));
        }
    }
private void CellBeginningEditMethod(DataGridBeginningEditEventArgs args)
        {
            if(args.Column.Header.ToString() == "Suggested")
            {
                //Do Operation
            }
        }