2009-11-17 7 views
3

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은 해결책을 제안했으며이를 따르 겠지만 더 쉬운 방법이 없는지 알고 싶습니다.

건배.

답변

0

불행히도 이렇게하는 것이 더 좋은 방법은 아닙니다. 유효성 검사기를 기반으로 UI 자체를 업데이트하는 유일한 방법은 바인딩 설정자입니다.

이것은 Silverlight에서 유효성 검사 시스템의 큰 한계라고 생각합니다. 그 JoyOfCode 기사가 정말 좋은 방법입니다.

또한 오류를 viewmodel에 바인딩 할 수있는 article by the same publisher을 권장하지만 그 반대의 경우에는 작동하지 않습니다.

0

또한 매우 큰 규모의 LOB 응용 프로그램에서 Josh의 접근법을 사용했으며 작동이 지저분한 반면. 유효성 검사 컨텍스트는 특히 더 복잡한 논리를 가진 몇 가지 스크랩에서 벗어날 가능성이 있습니다.

관련 문제