0

間違った値が入力されたときに例外をスローするメモリ内のオブジェクトにテキストボックスをバインドしました。

TextBoxでValidatesOnExceptionがtrueに設定され、Mode = TwoWayである場合、例外が発生した場合、Bindingによってインターセプトされる必要がありますが、そうではありません。

TextBoxは次のようになります。

    <TextBox Name="txtAge"
             Text="{Binding Age, Mode=TwoWay, ValidatesOnExceptions=True}"
              />

メモリ内にオブジェクトを作成し、layoutrootグリッドのDataContextをUserControlのコンストラクターで作成されたオブジェクトに設定しました。

Student std = new Student();
LayoutRoot.DataContext = std;

バインドされたオブジェクトタイプは次のとおりです。

public class Student {

   private string _name;
   public string Name {
       get { return _name; }
       set { _name = value; }
   }

   private int _age;
   public int Age {
       get { return _age; }
       set {
           if (value > 100 || value < 0) {
               throw new Exception("Please enter age between 0 - 100");
           }
           _age = value;
       }
   }
}

数値<0または>100が入力されたときにプロパティAgeによってスローされる例外は、インターセプトする必要があります。

これは私が期待する動作です:

image1

しかし、代わりに例外が発生します。

私はこのブログで検証を研究していますhttp://www.codeproject.com/Articles/86955/Silverlight-4-Data-Validation-Tip-of-the-Day-Part

これはステップ8であり、これは動作であるはずです。作成者は、このステップを超えてNotifyOnValidationErrorとBindingValidationErrorについて説明しています。

どのような設定を失敗する可能性がありますか?

前もって感謝します、

ラファエル

4

1 に答える 1

0

ユーザーが処理しないすべての例外の中断を無効にするか、中断しない例外のリストに例外を追加するだけです (ここから) 。

Debug -> Exceptions -> に移動し、例外、つまり System.ComponentModel.DataAnnotation.ValidationException のチェックを外します

または、ここのコメントから[System.Diagnostics.DebuggerHidden()]、プロパティに属性を適用します。(「デバッグするかどうかを尋ねる VS Just-in-Time Debugger ダイアログが引き続き表示される場合があることに注意してください。」)

于 2013-04-03T07:19:11.623 に答える