1

我在验证网格的 DataTemplate 列中的文本框时遇到问题。文本框绑定的属性是“双”值。这是我的 TextBox 的 xaml 代码

 <TextBox  Text="{Binding SubTotalRawHours, Mode=TwoWay, ValidatesOnExceptions=True, NotifyOnValidationError=True}"  
                                                 MinHeight="24" VerticalAlignment="Top" BindingValidationError="ValidateTime" />

这是财产

  private double _SubTotalRawHours;
        public double SubTotalRawHours
        {
            get { return _SubTotalRawHours; }
            set
            {
                if (value < 0)
                {
                    throw new Exception("Value not allowed");
                }
                _SubTotalRawHours = value;
                NotifyPropertyChanged("SubTotalRawHours");
            }
        }

现在奇怪的问题是,如果我输入字母,代码会显示一个带有错误消息“输入格式不正确”的工具提示,这是正确的。但是如果我输入一个负值,我会得到一个异常“代码没有处理异常”。这是发生在这里

  if (value < 0)
                {
                    throw new Exception("Value not allowed");
                }

我已经尝试了一切,我什至尝试将文本框放在网格之外,但它不起作用。

真的很感激这里的一些投入。

编辑 1

好的,现在我对代码进行了一些更改,我有一个解决方法,而不是"ValidatesOnExceptions=True",我有"ValidatesOnDataErrors=True",我的 Model 类现在也继承自IDataErrorInfo并且我已经在我的类中实现了 IDataErrorInfo 成员

  private string _dataError = string.Empty;
        const string _ErrorsText = "Errors";
        string IDataErrorInfo.Error
        {
            get { return _dataError; }
        }
        public string this[string propertyName]
        {
            get
            {
                _dataError = null;
                switch (propertyName)
                {
                    case "OldHours":
                        if (OldHours < 0 || OldHours > 100)
                        {
                            return "Please enter a value between 0 - 100.";
                        }
                        break;
                }
                return null;
            }
        }

这是有效的(除了工具提示显示在错误的位置,但这很好)。我仍然无法理解为什么我的代码没有捕获任何异常。有什么我必须添加到我的模型类中的吗?

4

2 回答 2

1

如果 Visual Studio 设置为中断用户未处理的异常,它将在验证框架处理异常之前中断。您可以告诉调试器在调试时忽略验证异常,这让验证框架可以在不中断执行的情况下处理异常。

于 2013-04-04T00:15:55.003 回答
-3

您的设置器代码抛出异常,您的调用/客户端代码是否处理/拦截了异常?

很可能不是,这就是为什么你得到一个“未处理异常”的原因。

一个简单的测试,把throw异常改成弹出一个消息框,unhandle异常就没有了。

于 2013-04-03T03:57:32.840 回答