表错误未显示动态数据网格



我有一个动态数据网格,我正在构建的代码和渲染使用以下

<DataGrid ItemsSource="{Binding DataTable.DataList}"  AutoGenerateColumns="true"/>

我做了以下操作来填充网格:

public DataTableViewModel()
{
DataList = new DataTable();
for (int i = 0; i < 3; i++)
{
var column = new DataColumn();
column.DataType = typeof(string);
column.ColumnName = "Header " + i;
DataList.Columns.Add(column);
}
var row0 = DataList.NewRow();
row0["Header " + 0] = "Object A - Value 1";
row0["Header " + 1] = "Object A - Value 2";
row0["Header " + 2] = "Object A - Value 3";
DataList.Rows.Add(row0);
var row1 = DataList.NewRow();
row1["Header " + 0] =  "Object B - Value 1" ;
row1["Header " + 1] =  "Object B - Value 2" ;
row1["Header " + 2] =  "Object B - Value 3" ;
DataList.Rows.Add(row1);
DataList.ColumnChanged += DataList_ColumnChanged;
}
private void DataList_ColumnChanged(object sender, DataColumnChangeEventArgs e)
{
e.Row.RowError = "Row error!";
e.Row.SetColumnError(e.Column, "Oh no!");
}

数据显示正确,但我不能使错误工作。我希望当我编辑其中一个单元格时,它应该显示一个错误,但它没有。知道为什么吗?

知道为什么吗?

因为DataRow没有实现IDataErrorInfo接口。

您可以使用ValidationRule来显示错误:

public class RowDataValidationRule : ValidationRule
{
public override ValidationResult Validate(object value, CultureInfo cultureInfo)
{
DataRowView drv = (value as BindingGroup).Items[0] as DataRowView;
if (!string.IsNullOrEmpty(drv.Row.RowError))
{
return new ValidationResult(false, drv.Row.RowError);
}
else
{
return ValidationResult.ValidResult;
}
}
}

XAML:

<DataGrid ItemsSource="{Binding DataList}"  AutoGenerateColumns="true">
<DataGrid.RowValidationRules>
<local:RowDataValidationRule ValidationStep="UpdatedValue" />
</DataGrid.RowValidationRules>
</DataGrid>

更多信息和示例请参考文档

最新更新