Wpf DataGrid绑定命令到单元格单击
这里有一个简单的问题。我的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 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
}
}