Я обнаружил новые функции аннотации данных в 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 предложил решение, и я собираюсь последовать ему, но я хотел бы знать, если нет более легкого пути.
Приветствие.