在WPF datagrid中,当单元格无效时,它会阻止其他单元格进行编辑,以便用户在无效单元格生效之前无法输入数据。我想知道是否有一种方法可以禁用此行为?
我是如何使用datagrid的
<DataGrid ItemsSource="{Binding ..}">
<DataGrid.Columns>
<DataGridTextColumn Header="Name"
Binding="{Binding Name
, UpdateSourceTrigger=PropertyChanged
, NotifyOnValidationError=True
, ValidatesOnDataErrors=True
, ValidatesOnExceptions=True}"
</DataGridTextColumn>
</DataGrid.Columns>
</DataGrid>发布于 2013-10-02 06:12:23
我重写了datagrid的datagrid方法,如下所示,它现在起作用了。
protected override void OnCanExecuteBeginEdit(System.Windows.Input.CanExecuteRoutedEventArgs e)
{
var hasCellValidationError = false;
var hasRowValidationError = false;
const BindingFlags bindingFlags =
BindingFlags.FlattenHierarchy | BindingFlags.NonPublic | BindingFlags.Instance;
var cellError= this.GetType().BaseType.GetProperty("HasCellValidationError", bindingFlags);
var rowError = this.GetType().BaseType.GetProperty("HasRowValidationError", bindingFlags);
if (cellError != null)
hasCellValidationError = (bool) cellErrorInfo.GetValue(this, null);
if (rowError != null)
hasRowValidationError = (bool) rowErrorInfo.GetValue(this, null);
base.OnCanExecuteBeginEdit(e);
if ((!e.CanExecute && hasCellValidationError) || (!e.CanExecute && hasRowValidationError))
{
e.CanExecute = true;
e.Handled = true;
}
}同样的问题:DataGrid: On cell validation error other row cells are uneditable/Readonly
发布于 2013-09-15 09:43:21
如果它是一个mvvm应用程序,并且这个行为将在您的应用程序中重复多次,您可以创建您自己的从DataGrid继承的DataGrid,并覆盖OnCellEditEnding方法,如下所示:
public class myDataGrid : DataGrid
{
protected override void OnCellEditEnding(DataGridCellEditEndingEventArgs e)
{
e.Cancel = true;
}
}如果没有,您也可以注册到网格的CellEditEnding事件,如下所示:
mainGrid.CellEditEnding += (s, e) =>
{
e.Cancel = true;
};https://stackoverflow.com/questions/18810009
复制相似问题