1

グリッドの DataTemplate 列の Textbox の検証で問題が発生しています。テキストボックスがバインドされているプロパティは「double」値です。これが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

OK、コードにいくつかの変更を加えたので、回避策があります。代わりに"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

-3

セッター コードが例外をスローしています。呼び出し元/クライアント コードは例外を処理/インターセプトしましたか?

ほとんどの場合、「ハンドルされていない例外」が発生したのはそのためです。

簡単なテストでは、スロー例外をメッセージ ボックスをポップアップするように変更すると、ハンドルされない例外はなくなります。

于 2013-04-03T03:57:32.840 に答える