【问题标题】:How can i check the validations in a view on a button click?如何在单击按钮的视图中检查验证?
【发布时间】:2019-04-13 02:03:06
【问题描述】:

我们正在和我的一些同学一起为大学做一个项目。我们必须做一个桌面应用程序,但我们遇到了一些问题。基本上很难理解 MVVM,但我在验证方面遇到了一些问题。首先我们想使用INotifyDataErrorInfo接口进行验证,因为老师推荐了这个,但是我们没看懂。

所以我们用这样的 ValidationRules 解决了验证问题:

public class CantBeNullRule : ValidationRule
{
    public override ValidationResult Validate(object value, CultureInfo cultureInfo)
    {
        string charString = value as string;
        if (charString.Length == 0)
        {
            return new ValidationResult(false, $"The box can't be empty");
        }
        return new ValidationResult(true, null);
    }
}

我们为视图上的文本框绑定这些验证:

<TextBox x:Name="pwdPassword" Grid.Column="2" Grid.Row="4" Grid.ColumnSpan="4" BorderThickness="0,0,0,1" VerticalAlignment="Bottom" BorderBrush="#FF5DC2D5" Foreground="Black" SelectionBrush="#FF5DC2D5" FontFamily="Open Sans SemiBold" FontSize="10">
        <TextBox.Text>
            <Binding Path="Password" ValidatesOnDataErrors="True" UpdateSourceTrigger="PropertyChanged">
                <Binding.ValidationRules>
                    <rule:CantBeNullRule/>
                </Binding.ValidationRules>
            </Binding>
        </TextBox.Text>
    </TextBox>

问题是,当我们打开视图时,这个“CantBeNull”规则不会执行,首先我们必须在文本框中写一些东西。我希望在单击按钮时检查视图上的每个验证。如果其中一个验证为假,则写出错误消息,否则执行命令。

我们想要使用这些 ValidationRules,因此我们正在等待此类验证的答案。

【问题讨论】:

    标签: c# validation model-view-controller mvvm validationrules


    【解决方案1】:

    我认为该规则仅在绑定更新时触发,您已将其设置为“PropertyChanged”。

    我个人会将验证放在 ViewModel 上,而不是视图上(尽管这确实需要使用 INotifyDataErrorInfo)。这样 ViewModel 的构造函数可以为 Password 设置一个默认值(空白),这将触发验证规则。

    INotifyDataErrorInfo 对于一个简单的应用程序来说似乎需要付出很多努力,但它非常值得了解。设置好后,它会非常流畅,并且添加新的验证规则既快速又简单。有一些有用的链接here

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-12-28
      • 1970-01-01
      • 2019-03-27
      • 2011-10-20
      • 1970-01-01
      • 2017-09-26
      • 2016-08-21
      • 1970-01-01
      相关资源
      最近更新 更多