gpt4 book ai didi

c# - 单击 CancelBtn 取消更改

转载 作者:行者123 更新时间:2023-12-03 10:59:50 25 4
gpt4 key购买 nike

我的程序中有自定义属性网格,其中所有属性都可以从 viewModel 绑定(bind)。在此属性网格中还有 2 个按钮 - SaveBtn 和 EditBtn。用户在属性网格中编辑属性。单击 SaveBtn 时,必须将所有属性保存在数据库中。如果用户想编辑属性,他点击EditBtn,然后在将属性保存到数据库之前(点击SaveBtn),应该会出现一个新窗口,用户可以在其中选择修改属性的原因。在该窗口上还有三个按钮 - ExitWithSavingToDatabase、ExitWithoutSavingToDatabase 和 Cancel。

如果用户选择取消,则应取消所有更改。但是 viewModel 中的属性已经有了新的值。我的问题是-如何将属性重置为旧值???我正在考虑从数据库重新加载属性,但是如果有更好的解决方案,我可以在哪里不使用数据库来做到这一点?

最佳答案

一个可能更好的方法是只使用绑定(bind)组中的值,而不是模型。
这支持绑定(bind)事务提交/中止
为您的窗口定义绑定(bind)组

  <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();

将组值绑定(bind)到模型。

关于c# - 单击 CancelBtn 取消更改,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17744059/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com