2011-02-03 55 views
1

我在数据表单中有一个dataform和一个datagrid。这个数据网格绑定到一个ObservableCollection。我写了一个CustomValidator,当可观察集合中的计数为0时抛出ValidationException。ValidationSummary控件不处理此异常,而是应用程序变得不稳定并调用Application Unhandled Exception。我没有使用RIA服务。以下是我的代码Silverlight验证摘要不处理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

我在我的项目也有类似的问题,我在那里迫使在文本框的keyup事件中进行验证。我在文本框中将文本框绑定属性设置为keyup事件中的文本,所以我可以在键入时进行验证。 Silverlight不喜欢这个。它抛出一个未处理的异常。所以一旦我从keyup事件中删除了验证,它就像它应该那样工作。在用户选择屏幕上的另一个控件之前,该属性不会更新,但如果我想利用Silverlight验证,则需要完成此操作。

我还没有确认一个集合的工作,例如你在做什么,但也许这样你需要使用IDataErrorInfo的执行情况。在这种情况下不会抛出异常,所以这可能是一种方式。