WPFでは、一般的な検証実装では、プロパティ値が変更されたときに検証が行われます。これは問題を提起する。 「必須」フィールドがあり、ボタンをクリックすると、ボタンをクリックしたときに空白がユーザーに通知されません。値は変わらないので、検証は行われません。どこで呼び出すかエンタープライズライブラリの検証ブロックの空フィールドの検証時にRequired.GetBindingExpression
このオンラインでは、コードビハインド、ベースビューモデルなどで明示的に検証を実行する方法はたくさんありますが、マイクロソフトが提案するソリューションに興味があります。特にこれは、現在使用しているMicrosoftエンタープライズライブラリの検証アプリケーションブロックに適用されます。マイクロソフトは、ここでのベストプラクティスのアプローチを推奨しています: 彼らは述べる。特にhttps://msdn.microsoft.com/en-us/library/ff664451(v=pandp.50).aspx
:
必要な検証属性を運ぶ検証コントロールの値がそもそも空で、検証中に空のままの場合は、ソースは更新されず、検証は行われません。この特定のケースでは、ターゲットのnullデフォルト値が変更されないため、ValidateOnTargetUpdateプロパティーは機能しません。
this.Required.GetBindingExpression(TextBox.TextProperty).UpdateSource();
値が変換された後、それが設定される前に、検証ルールは、ConvertedProposedValueのステップで動作します。その代わり、あなたはここに示すように、発生する検証を強制的に結合にUpdateSourceを呼び出すことができますソース上で。これは、値変換エラーが他のメカニズムによって検出されなければならないことを意味します。 1つの方法は、検証されたバインディングでValidatesOnDataErrorsプロパティを有効にすることです。
残念ながら私はこれを理解できません。どこでUpdateSourceメソッドを呼び出すのですか?どのオブジェクトがthis
でMicrosoftのスニペットを参照していますか?私はどこかのバインディングを傍受するような何かをする必要があると仮定していますが、わかりません。
あなたの 'Window'クラスはその機能を必要とせず、' MainWindow.xaml.cs'にそれを入力すると 'GetBindingExpression'関数が得られます。これは任意の 'コントロール'で利用可能です。 – XAMlMAX