【问题标题】:How do I validate user input in a Prism 6.3 WPF app?如何在 Prism 6.3 WPF 应用程序中验证用户输入?
【发布时间】:2018-03-20 06:17:31
【问题描述】:

我正在尝试使用 c# 和 Prism 6.3 library 的帮助编写一个 WPF 应用程序。我观看了@BrianLagunas 在pluralsight.com 上为 Prism 提供的所有可用教程。但没有一个显示如何进行数据验证。

在将数据提交到数据库之前,我需要添加输入验证。

如何添加验证规则,如何在将数据保存到数据库之前检查表单是否有效?

【问题讨论】:

  • 有什么阻止您向绑定添加验证规则吗?这里没有什么棱镜,除非我错过了什么。
  • @Haukinger 将规则添加到绑定是什么意思?
  • 我说的是普通的旧 wpf 绑定验证,我在回答中放了一个例子和一些解释
  • 不幸的是,输入验证超出了 Prism 入门课程的范围。由于您有复数,我推荐以下课程,它将涵盖您正在寻找的内容。 app.pluralsight.com/library/courses/wpf-data-binding-in-depth/…

标签: c# wpf mvvm prism


【解决方案1】:

您正在寻找MvvmValidation。 我认为图书馆满足您的需求。 去试试看,有一些例子。

【讨论】:

    【解决方案2】:

    简单的 wpf 绑定验证可能在这里工作。

    鉴于此代码来自视图的 xaml:

    <TextBox>
        <TextBox.Text>
            <Binding Path="Data">
                <Binding.ValidationRules>
                    <myNamespace:IntegerValidationRule/>
                </Binding.ValidationRules>
            </Binding>
        </TextBox.Text>
    </TextBox>
    

    还有这条规则

    public class IntegerValidationRule : ValidationRule
    {
        public override ValidationResult Validate( object value, CultureInfo cultureInfo )
        {
            var stringData = value as string;
            if( stringData == null )
                return new ValidationResult( false, "not a string" );
            int dummy;
            if( !int.TryParse( stringData, out dummy ) )
                return new ValidationResult( false, "not an integer" );
            return ValidationResult.ValidResult;
        }
    }
    

    如果您输入的不是整数,您会在文本框周围看到一个漂亮的红色边框。而且,更重要的是,不会调用视图模型的 Data 属性设置器。

    如果您需要复杂的验证(即没有单个属性值有效,而只有不同属性值的组合),那么您的视图模型需要实现INotifyDataErrorInfo。您基本上在任何受影响的属性的设置器中进行验证,最后引发 ErrorsChanged...

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2022-06-10
      • 1970-01-01
      • 2015-04-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多