SL3의 새로운 데이터 주석 기능을 발견했으며이를 사용자 입력 유효성 검사에 사용하고 있습니다. 이와 같은MVVM에서 유효성 검사에 DataAnnotations 사용
내가있어 입력 :
<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()
을 작성하는 것입니다. 단점은 완전히 관리 할 수 없다는 점과 내 viewa에서 코드 숨김을 싫어한다는 것입니다.
http://www.thejoyofcode.com/Silverlight_Validation_and_MVVM_Part_II.aspx은 해결책을 제안했으며이를 따르 겠지만 더 쉬운 방법이 없는지 알고 싶습니다.
건배.