如何在单击按钮的视图中检查验证



我们正在和我的一些同学一起为大学做一个项目。我们必须做一个桌面应用程序,但我们遇到了一些问题。基本上很难理解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"规则不会执行,首先我们必须在文本框中写入一些内容。当我点击一个按钮时,我想检查查看的每个验证。如果其中一个验证为false,则写出错误消息,否则执行该命令。

我们想使用这些验证规则,所以我们正在等待这种验证的答案。

我认为只有在更新绑定时才会触发规则,您已将绑定设置为"PropertyChanged"。

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

INotifyDataErrorInfo对于一个简单的应用程序来说可能需要付出很多努力,但它非常值得了解。一旦你设置好了,它就会非常流畅,添加新的验证规则也很快很容易。这里有一些有用的链接

最新更新