我一直在使用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 ...
任何想法都会很棒。我在网上搜索了很多,但似乎找不到合适的解决方案...
答案 0 :(得分:0)
对于第一个,ViewModel上的属性应该在构造函数中使用值初始化
public double Property1 {get; set;}
public ViewModel()
{
Property1 = 0;
}
对于第二个,在所有字段都通过验证之前,不应启用提交按钮。如果您在数据库中有一个唯一的字段,则在属性更改时进行验证,如果未通过则显示和错误。您可以拥有一个绑定到按钮的IsEnabled属性的布尔属性,并在所有字段通过验证后将其设置为true。