gpt4 book ai didi

WPF 验证 : How to validate the whole page

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

我正在使用以下文章来验证用户的输入:

http://weblogs.asp.net/monikadyrda/archive/2009/06/24/wpf-textbox-validation.aspx
http://weblogs.asp.net/monikadyrda/archive/2009/07/28/wpf-textbox-validation-2.aspx

我有一个包含 100 多个文本框的窗口,我需要检查所有文本框是否有效。

想象以下情况 -> 用户输入了无效值:

  • 1)验证规则将验证错误并显示错误
    留言(好!)
  • 2) viewmodel 不会知道该值有
    已更新(使用无效字符串)。它将保持旧的
    值(value)。
  • 3) 因此,任何将启用的“保存”按钮绑定(bind)到 IsValid 的尝试
    属性(property)将失败。 (如第 2 条所述)(糟糕!)

  • 所以,我的问题是:如何在 View 模型中验证整个页面?

    最佳答案

    有一篇很好的文章here处理这个问题——我使用了这种方法,效果很好。

    基本思想是使用附加属性——称为“ValidationScope.Errors”——将 View 的验证范围绑定(bind)到 View 模型中的属性。

    这是引用自链接文章的代码:

    public class ValidationScope{    public static IList GetErrors(DependencyObject obj)    {        return (IList)obj.GetValue(ErrorsProperty);    }    public static void SetErrors(DependencyObject obj, IList value)    {        obj.SetValue(ErrorsProperty, value);    }    public static readonly DependencyProperty ErrorsProperty =        DependencyProperty.RegisterAttached("Errors", typeof(IList), typeof(ValidationScope),         new PropertyMetadata(null, ErrorsChanged));    public static void ErrorsChanged(DependencyObject obj, DependencyPropertyChangedEventArgs args)    {        FrameworkElement element = (FrameworkElement)obj;        element.BindingValidationError += delegate(object sender, ValidationErrorEventArgs e)            {                if (e.Action == ValidationErrorEventAction.Added)                {                    GetErrors(obj).Add(e.Error);                }                else                {                    GetErrors(obj).Remove(e.Error);                }            };    }}

    You can see this attached dependency property works by listening to the framework's BindingValidationError event, and adding/removing errors to the view-model target you specify. To use this in your code, simply bind the dependency property ValidationScope.Errors to a target property in your view model:

    <my:SomeUserControl my:ValidationScope.Errors="{Binding MyViewModel.Errors}" />

    现在您的 View 模型包含一个属性“错误”,您可以使用它来检查 View 是否实际有效。

    关于WPF 验证 : How to validate the whole page,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16597343/

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