我有一个带有TextBox控件的MVVM应用程序,我要验证它是否为空。由于应该对每个键击执行评估,我更改了绑定,因此它包含
Text={Binding ..., UpdateSourceTrigger=PropertyChanged}
现在我还想在TextBox控件失去焦点时执行一个动作,因此TextBox控件的默认行为是合适的。我的问题是我不知道如何组合这两个设置(如果可能的话)。
有什么想法吗?如何对LostFocus事件的击键和作出反应?
答案 0 :(得分:2)
您可以使用attached behavior将LostFocus
事件映射到ViewModel中的命令。
答案 1 :(得分:1)
您通常会在IDataErrorInfo
中实施INotifyDataErrorInfo
或ViewModels
个接口,以便在MVVM
处理此问题。
此外,attributes
非常强大,可能会为您提供一个很好的解决方案,具体取决于您的要求。它会在ViewModel
中看起来像这样。
[Required(ErrorMessage = "Field 'Range' is required.")]
[Range(1, 10, ErrorMessage = "Field 'Range' is out of range.")]
public int Range
{
get
{
return this.range;
}
set
{
if (this.range != value)
{
this.range = value;
this.OnPropertyChanged("Range");
}
}
}
我建议你看一下这些文章。
WPF MVVM应用程序中基于属性的验证 http://www.codeproject.com/Articles/97564/Attributes-based-Validation-in-a-WPF-MVVM-Applicat
验证用户输入 - WPF MVVM http://www.codeproject.com/Articles/98681/Validating-User-Input-WPF-MVVM
使用MVVM中的属性和IDataErrorInfo接口进行WPF验证 http://weblogs.asp.net/marianor/archive/2009/04/17/wpf-validation-with-attributes-and-idataerrorinfo-interface-in-mvvm.aspx
使用IDataErrorInfo在MVVM中使用Silverlight和WPF进行验证 http://www.arrangeactassert.com/using-idataerrorinfo-for-validation-in-mvvm-with-silverlight-and-wpf/
答案 2 :(得分:1)
您应该考虑使用IDataErrorInfo
接口和ValidatesOnErrorInfo
属性进行绑定。有关如何使用这两者的简短博客文章可在此处找到:http://asimsajjad.blogspot.de/2010/08/input-validation-using-mvvm-pattern.html