gpt4 book ai didi

wpf - 有没有办法在初始状态禁用或 'soften' 验证错误的视觉效果?

转载 作者:行者123 更新时间:2023-12-01 04:08:31 25 4
gpt4 key购买 nike

到目前为止我所拥有的是:一个 WPF 应用程序,使用 MVVM,实现了 IDataErrorInfo。一切都按预期工作。

每次我打开“创建新实体”对话框时,用户都会得到一个漂亮的表单,整个地方都闪烁着红色。从纯验证的角度来看,这是可以预期的,但这很烦人,我希望能够做两件事中的任何一件。

  • “软化”红色错误突出显示颜色,让我们说橙色或黄色,以表示“必填字段”。随后,当用户开始与控件交互时,切换到红色突出显示
  • 如果那不可能,有没有办法禁用错误突出显示@初始状态?

  • 我找到了这篇文章 How can I get WPF to NOT display validation errors upon initial display of control?处理同样的问题,但并没有真正得到解答。

    我考虑在我的 IDataErrorInfo 实现中实现“清除所有错误”,以及实现 InitialState 标志,因此在用户更改至少一个字段之前不会添加错误,但这些都有副作用。
  • 如果我在初始化后清除所有错误,则验证关闭,但提交按钮当然是启用的:(
  • 如果我使用 InitialState 标志,该标志也绑定(bind)到提交按钮以禁用它......我会更进一步,但是所有错误都会随着单个属性字段的更改而添加。

  • 因此,在我为每个属性添加 InitState 标志之前,我会停下来询问是否有更简单、更通用的解决方案。

    如果需要,我可以发布一些代码。但是,我以标准方式实现 IDataErrorInfo,即 Dictionary<string,string>对于错误消息,带有 OnChange 事件的属性字段和用于调用各个验证方法的 switch case 语句。

    编辑:
    这就是我最终得到的。
  • 我添加了 IsInitState=true VM 中每个“必填”字段属性的标志
  • 在 setter 代码中,此标志在第一次更改时设置为 false
            if (Name != value)
    {
    Name = value;
    IsInitState_Name = false;
    base.OnPropertyChanged("Name");
    }
  • 在ValidateName()中,Null/empty测试是有条件的基于flag

    if (!IsInitState_Name && String.IsNullOrEmpty(this.Name))
  • 提交按钮“canExecute”在启用提交之前检查所有标志是否 == false
  • 这是一些额外的工作,但只需要“必需/不可为空”的属性。现在创建新界面最初没有错误消息,但验证功能齐全
  • 最佳答案

    您可以向您的类添加一个标志,该标志表明该类是否应该绕过它的验证。

    例如,当新创建一个类时,有 ShouldValidate标志默认为假。如果新类已经存在,例如从数据库中提取它的数据,设置ShouldValidate标记为 true .当用户执行 Save命令,设置 ShouldValidate如果它是假的,则为真。

    如果您的类(class)也有 IsValid属性然后设置 ShouldValidate在运行验证代码之前设置为 true,因为通常如果您调用 IsValid你通常期望控件的验证运行(我的大多数验证类都有这个属性,我通常在保存之前检查 IsValid)

    关于wpf - 有没有办法在初始状态禁用或 'soften' 验证错误的视觉效果?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7730272/

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