我在dataform中有一个dataform和一个datagrid。此数据网格绑定到ObservableCollection。我编写了一个CustomValidator,当observable集合中的计数为0时抛出ValidationException.ValidationSummary控件不处理此异常,而是应用程序变得不稳定并调用Application Unhandled Exception。我没有使用RIA服务。以下是我的代码
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 :(得分:0)
我的项目中遇到了类似的问题,我强制对文本框的keyup事件进行验证。我在textup事件中将文本框绑定属性设置为文本框中的文本,因此我可以在键入时进行验证。 Silverlight不喜欢这个。这是一个未经处理的例外。因此,一旦我从keyup事件中删除了验证,它就可以正常工作。在用户在屏幕上选择另一个控件之前,该属性不会更新,但如果我想利用Silverlight验证,则需要执行此操作。
我没有使用验证集合,例如你正在做的事情,但也许在你需要使用IDataErrorInfo实现的情况下。在这种情况下不会抛出异常,所以这可能是要走的路。