2011-02-03 3 views
1

데이터 폼에 데이터 폼과 데이터 격자가 있습니다. 이 DataGrid는 ObservableCollection에 바인딩됩니다. 관측 가능한 컬렉션의 개수가 0 일 때 ValidationException을 throw하는 CustomValidator를 작성했습니다. ValidationSummary 컨트롤은이 예외를 처리하지 않고 대신 응용 프로그램이 불안정 해지고 Application Unhandled Exception을 호출합니다. RIA 서비스를 사용하지 않습니다. 아래 코드는Silverlight ValidationSummary 처리 안 함 ValidationException

public class UserCompanyProgram : INotifyPropertyChanged 
{ 
    public void ToWebServiceProgram() 
    { 
     lstUserProgram.CollectionChanged += (sender, e) => 
     { 
      //Validator.ValidateProperty(lstUserProgram, 
      //    new ValidationContext(this, null, null) { MemberName = "lstUserProgram" }); 
      lstUserProgram = _lstUserProgram; 
      UserProgramChanged(); 
     }; 
    } 
    private ObservableCollection<Pricing.Model.UserProgram> _lstUserProgram = new ObservableCollection<UserProgram>(); 
    [CustomValidation(typeof(ModelValidator), "ValidateUserProgramCollection")] 
    [Display(Name = "New Programs", Description = "Add program")] 
    public ObservableCollection<UserProgram> lstUserProgram 
    { 
     get { return _lstUserProgram; } 
     set 
     { 
       Validator.ValidateProperty(lstUserProgram, 
       new ValidationContext(this, null, null) { MemberName = "lstUserProgram" }); 
       this._lstUserProgram = value; 
       NotifyPropertyChanged("lstUserProgram"); 

     } 
    } 
} 

    dgSelectedPrograms.SetBinding(DataGrid.ItemsSourceProperty, new Binding("lstUserProgram") { ValidatesOnNotifyDataErrors=true, ValidatesOnExceptions=true }); 

어떻게 ValidationSummary에서 예외를 처리합니까?

답변

0

텍스트 상자의 키 이벤트에 대한 유효성 검사를 강제로 수행했던 프로젝트에서 비슷한 문제가 발생했습니다. 텍스트 상자에서 textbox 바운드 속성을 keyup 이벤트에 설정 했으므로 입력시 유효성을 검사 할 수있었습니다. Silverlight는 이것을 좋아하지 않습니다. 그것은 처리되지 않은 예외를 던지고있었습니다. 따라서 일단 keyup 이벤트에서 유효성 검사를 제거하면 정상적으로 작동합니다. 사용자가 화면에서 다른 컨트롤을 선택할 때까지 속성이 업데이트되지 않지만 Silverlight 유효성 검사를 이용하려면 수행해야 할 작업이 있습니다.

나는 당신이하고있는 것과 같은 콜렉션의 유효성을 검사하지 않았지만 IDataErrorInfo 구현을 사용해야하는 경우에 사용할 수 있습니다. 이 경우에는 예외가 발생하지 않으므로 아마도 그렇게 할 수 있습니다.