我发现了SL3的新数据注释功能,并将其用于用户输入验证。
我有这样的输入:
<dataInput:Label Target="{Binding ElementName=inputName}"/>
<TextBox
x:Name="inputName"
Text="{Binding RequestDemoData.Name, Mode=TwoWay, ValidatesOnExceptions=true, NotifyOnValidationError=true}"/>
<dataInput:DescriptionViewer {Binding ElementName=inputName}"/>
我的模型长这样:
[Display(ResourceType = typeof(Resources.Resources), Name = "Name", Description = "NameDescription")]
[Required(ErrorMessageResourceType = typeof(Resources.Resources), ErrorMessageResourceName = "NameRequired")]
[RegularExpression(@"^[^0-9]*[a-zA-Z]+[^0-9]*$", ErrorMessageResourceType = typeof(Resources.Resources), ErrorMessageResourceName = "NameError")]
public string Name
{
get
{
ValidateProperty("Name", _name);
return _name;
}
set
{
if (_name != value)
{
ValidateProperty("Name", value);
_name = value;
OnPropertyChanged("Name");
}
}
}
到目前为止,一切都很好。如果用户输入了一些错误的数据,当他/她失去焦点时,我会收到一个错误消息。问题是,我有一个绑定到
ICommand
的提交按钮,我不知道如何在用户单击它时显示错误消息。不好的方法是添加一些代码并执行
GetBindingExpression(foo).UpdateSource()
,这样就可以解决问题。缺点是它完全无法管理,并且我不喜欢将代码写在视图中。
http://www.thejoyofcode.com/Silverlight_Validation_and_MVVM_Part_II.aspx 提出了一个解决方案,我打算遵循它,但我想知道是否有更简单的方法。干杯。