Silverlight ValidationSummary不处理ValidationException

时间:2011-02-03 00:28:32

标签: validation silverlight-4.0 observablecollection

我在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处理异常?

1 个答案:

答案 0 :(得分:0)

我的项目中遇到了类似的问题,我强制对文本框的keyup事件进行验证。我在textup事件中将文本框绑定属性设置为文本框中的文本,因此我可以在键入时进行验证。 Silverlight不喜欢这个。这是一个未经处理的例外。因此,一旦我从keyup事件中删除了验证,它就可以正常工作。在用户在屏幕上选择另一个控件之前,该属性不会更新,但如果我想利用Silverlight验证,则需要执行此操作。

我没有使用验证集合,例如你正在做的事情,但也许在你需要使用IDataErrorInfo实现的情况下。在这种情况下不会抛出异常,所以这可能是要走的路。