4

http://msdn.microsoft.com/en-us/magazine/dd419663.aspxの記事で Josh Smith が説明しているように、MVVM パターンを使用して WPF アプリケーションを開発しています。

Convert Back エラーに対応する適切な方法がわかりません (たとえば、ユーザーが double にバインドされたテキスト ボックスに文字を入力した場合など)。

Josh Smith は、モデルがそれ自身の値を検証し、SomeModel.IsValid を通じてブール値の結果を提示する検証システムを提案しています。次に、Josh は IsValid の値を特定のボタン (フォームの [保存] ボタンなど) の述語として使用します。フォームが有効に入力されていない場合、IsValid は false になり、[保存] ボタンは無効になります。

この方法は本当にうまくいきます。ただし、ユーザーが変換できない値をテキスト ボックスに入力すると、ConvertBack エラーが発生します。プロパティの ViewModel のセッターは呼び出されないため、Model のプロパティは更新されません。IsValid は true のままです。ビューはエラー メッセージを表示し、エラー (または設定が何であれ) を強調表示することによって検証エラーに応答しますが、モデルが更新されていないため、モデルの IsValid プロパティがまだ true であるため、[保存] ボタンはアクティブなままです。 .

これと同じ課題を経験した MVVM ユーザーはいますか? 何か案は?

1 つの提案は、モデルのプロパティが Nullable になる可能性があることです。次に、ユーザーが変換不可能な日付 (ダブルにバインドされたテキスト ボックス内の文字など) を入力した場合、コンバーターはソースを Null に設定する必要があります。ただし、これを行う簡単な方法を見つけることができませんでした-機能が必要なすべてのデータ型と、必要な数値形式ごとにカスタムコンバーターを作成する必要があるようです。デザインチャレンジ。

何か案は?

4

2 に答える 2

1

WPFアプリケーションフレームワーク(WAF)のBookLibraryサンプルアプリケーションに興味があるかもしれません。これは、ParsingまたはConvertBack例外が検証エラーとしてどのように処理されるかを示しています。

[ページ]テキストボックスに「abc」と入力するだけで、検証エラーがツールチップとして表示され、[保存]ボタンが無効になっていることを確認できます。

于 2011-04-07T19:23:44.670 に答える
1

この問題に対処する 2 つの優れた記事を見つけました。

Karl Shifflett によるもの: http://karlshifflett.wordpress.com/mvvm/input-validation-ui-exceptions-model-validation-errors/

ジョシュ・スミスによるもの:

http://joshsmithonwpf.wordpress.com/2008/11/14/using-a-viewmodel-to-provide-meaningful-validation-error-messages/

ここで複製するには少し複雑すぎるため、リンクを回答としてマークします。

于 2011-04-06T14:48:50.350 に答える