我的程序自定义属性网格中,所有属性都可以从viewModel绑定。在这个属性网格中还有2个按钮--SaveBtn和EditBtn。 用户编辑属性网格中的属性。单击SaveBtn时,所有属性都必须保存在数据库中。如果用户想要编辑属性,则单击EditBtn,然后在将属性保存到数据库(单击SaveBtn)之前,应该出现新窗口,其中用户选择修改属性的原因。在该窗口上还有三个按钮 - ExitWithSavingToDatabase,ExitWithoutSavingToDatabase和Cancel。
如果用户选择取消,则应取消所有更改。但是viewModel中的属性已经有了新值。 我的问题是 - 如何将属性重置为旧值? 我正在考虑从数据库重新加载属性,但如果有更好的解决方案,我可以在不使用数据库的情况下完成它?
答案 0 :(得分:1)
有很多方法:
答案 1 :(得分:1)
可能更好的方法是仅使用绑定组中的值,而不是模型。 这支持绑定事务提交/中止 为您的窗口定义绑定组
<Window.BindingGroup>
<BindingGroup >
<BindingGroup.ValidationRules>
<local:YourValidationClass/>
</BindingGroup.ValidationRules>
</BindingGroup>
</Window.BindingGroup>
YourValidationClass应该处理BindingGroup的验证,而不是单个值。重要的是始终使用BindingGroup中的GetValue,而不是模型,模型尚未修改
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();
将组值绑定到模型。