可能更好的方法是只使用绑定组中的值,而不是模型。 这支持绑定事务提交/中止 定义结合基团为你的窗口
YourValidationClass应该处理BindingGroup的验证,而不是一个单一的值。重要的始终使用的GetValue从的BindingGroup这里,而不是从模式,这个模式还没有被修改
public class YourValidationClass : ValidationRule
{
public override ValidationResult Validate(object value, System.Globalization.CultureInfo cultureInfo)
{
BindingGroup bindingGroup = (BindingGroup)value;
if (bindingGroup.Items.Count == 1)
{
User user = (User)bindingGroup.Items[0];
string firstName = (string)bindingGroup.GetValue(user, "FirstName");
string lastName = (string)bindingGroup.GetValue(user, "LastName");
if (string.IsNullOrWhiteSpace(firstName) || string.IsNullOrWhiteSpace(lastName))
{
return new ValidationResult(false, "Both fields required");
}
}
return ValidationResult.ValidResult;
}
}
你的取消按钮,然后应执行以下代码:
this.BindingGroup.CancelEdit();
你保存按钮应该至少做
this.BindingGroup.CommitEdit();
将组值绑定到模型。