質問

非常に単純な WPF アプリケーションがあり、データ バインディングを使用していくつかのカスタム CLR オブジェクトを編集できるようにしています。ユーザーが保存をクリックしたときに入力検証を追加したいと考えています。ただし、私が読んだすべての WPF 書籍では、この問題についてはまったくスペースが割かれていません。カスタムの ValidationRules を作成できることはわかりましたが、これは私のニーズにとってやりすぎではないかと疑問に思っています。

そこで私の質問は次のとおりです。WPF でユーザー入力を検証するためのベスト プラクティスを示す、優れたサンプル アプリケーションまたは記事がどこかにありますか?

役に立ちましたか?

解決

新しい推奨方法は IDataErrorInfo を使用することかもしれないと思います

続きを読む ここ

他のヒント

MSさんより パターンと実践のドキュメント:

データ検証とエラー報告

ビューモデルまたはモデルは、データ検証を実行し、ユーザーが修正するために行動できるようにデータ検証エラーをビューに通知するために必要になることがよくあります。

SilverlightとWPFは、ビュー内のコントロールにバインドされている個々のプロパティを変更するときに発生するデータ検証エラーの管理をサポートします。コントロールにデータバウンドされた単一のプロパティの場合、ビューモデルまたはモデルは、着信の悪い値を拒否し、例外をスローすることにより、プロパティセッター内のデータ検証エラーを信号することができます。データバインディングの検証済みのセクシオンプロパティが真である場合、WPFとSilverlightのデータバインディングエンジンは例外を処理し、データ検証エラーがあることをユーザーに視覚的なキューを表示します。

ただし、この方法でプロパティを使用して例外を投げることは、可能であれば避ける必要があります。別のアプローチは、ビューモデルまたはモデルクラスにIdataerrorinfoまたはinotifyDataerrorinfoインターフェイスを実装することです。これらのインターフェイスにより、ビューモデルまたはモデルは、1つ以上のプロパティ値のデータ検証を実行し、ユーザーにエラーを通知できるようにエラーメッセージをビューに返すことができます。

このドキュメントでは、IDataErrorInfo と INotifyDataErrorInfo を実装する方法について説明します。

個人的に、私は検証を処理するために例外を使用しています。次の手順が必要です。

  1. データ バインディング式に「ValidatesOnException=True」を追加する必要があります。
  2. バインド先のデータ オブジェクトに、DependencyPropertyChanged ハンドラーを追加する必要があります。このハンドラーでは、新しい値が条件を満たすかどうかを確認し、満たしていない場合は (必要に応じて) オブジェクトの古い値に復元し、例外をスローします。
  3. コントロールに無効な値を表示するために使用するコントロール テンプレートでは、エラー コレクションにアクセスして例外メッセージを表示できます。

ここでのコツは、DependencyObject から派生したオブジェクトのみにバインドすることです。INotifyPropertyChanged の単純な実装は機能しません。フレームワークにバグがあり、エラー コレクションにアクセスできません。

こちらもチェック この記事. 。おそらくマイクロソフトがリリースしたと思われます エンタープライズ ライブラリ (v4.0) 彼らのパターンと実践では検証の主題が取り上げられていますが、なぜ WPF の検証が含まれていないのかは神のみぞ知るです。そのため、私が紹介しているブログ投稿では、作者がそれを適応させるために何をしたかについて説明しています。お役に立てれば!

あなたは次のことに興味があるかもしれません 本図書館 のサンプルアプリケーション WPF アプリケーション フレームワーク (WAF). 。WPF で検証を使用する方法と、検証エラーが存在する場合に [保存] ボタンを制御する方法を示します。

ビジネス クラスが UI によって直接使用される場合は、ロジックをその所有者に近づけるため、IDataErrorInfo を使用することをお勧めします。

ビジネス クラスが WCF/XmlWeb サービスへの参照によって作成されたスタブ クラスである場合、IDataErrorInfo を使用したり、ExceptionValidationRule で使用するために Exception をスローしたりすることはできません。代わりに、次のことができます。

  • カスタム ValidationRule を使用します。
  • WPF UI プロジェクトで部分クラスを定義し、IDataErrorInfo を実装します。
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top