WPF中的表单验证

时间:2010-01-18 15:26:50

标签: wpf validation forms mvvm

我一直在使用WPF和MVVM模式一段时间。我无法以“正常”方式进行验证:

1)我在ViewModel中实现了IDataErrorInfo接口。 XAML看起来像:

<TextBox Grid.Column="1"
         Grid.Row="1"
         Text="{Binding Path=ProjectKey, ValidatesOnDataErrors=True, UpdateSourceTrigger=LostFocus}" />

这里的问题是,无论是否使用LostFocus和PropertyChanged触发器,都会在用户选中该控件之前验证文本框。这意味着如果我在验证空字段,用户在第一次打开表单时会看到很多红色。理想情况下,输入只能在第一次“失去焦点”或“属性更改”之后或单击“提交”按钮后进行验证。

2)另一个问题是用户点击“提交”时的结束验证。在提交到数据库之前,您需要验证某些内容,例如重复项。我知道我可以使用UpdateSourceTrigger = Explicit并在所有控件上调用UpdateSource方法。我想知道是否有适当的方法在MVVM模式中执行此操作。似乎这样的代码不应该在ViewModel中,因为它非常特定于View ...

任何想法都会很棒。我在网上搜索了很多,但似乎找不到合适的解决方案...

1 个答案:

答案 0 :(得分:0)

对于第一个,ViewModel上的属性应该在构造函数中使用值初始化

public double Property1 {get; set;}

    public ViewModel()
{
    Property1 = 0;
}

对于第二个,在所有字段都通过验证之前,不应启用提交按钮。如果您在数据库中有一个唯一的字段,则在属性更改时进行验证,如果未通过则显示和错误。您可以拥有一个绑定到按钮的IsEnabled属性的布尔属性,并在所有字段通过验证后将其设置为true。