我使用這個,它適用於我的項目。
public class RowDataValidationRule : ValidationRule
{
public override ValidationResult Validate(object value, CultureInfo cultureInfo)
{
BindingGroup group = (BindingGroup)value;
foreach (var item in group.Items)
{
DataRowView rowView = item as DataRowView;
DataRow row;
if (rowView != null)
row = rowView.Row;
else
row = item as DataRow;
if (row != null && row.HasErrors)
{
var errorColumns = row.GetColumnsInError();
StringBuilder sb = new StringBuilder();
foreach (var column in errorColumns)
{
sb.AppendLine(row.GetColumnError(column));
}
return new ValidationResult(false, sb.ToString());
}
}
return ValidationResult.ValidResult;
}
}
XAML
<DataGrid ItemsSource="{Binding Path=MyListItems, Mode=OneWay, ValidatesOnDataErrors=true, ValidatesOnExceptions=true}">
<DataGrid.RowValidationRules>
<Base:RowDataValidationRule />
</DataGrid.RowValidationRules>
</DataGrid>
你應該考慮看代碼執行在那裏,它是在客戶端或服務器上,你需要刷新頁面? – MrFox
@MrFox它不是一個web應用程序... – Vale
我使用ColumnChanging和SetRowError進行驗證。我沒有問題。也許你可以發佈你的RowValidationRule的東西? – blindmeis