我有一个动态数据网格,我正在构建的代码和渲染使用以下
<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>
更多信息和示例请参考文档