1

構造を改善するために、既存のアプリケーションの1つをMVVMパターンに変換していますが、データ検証を行うための最良の方法に少し戸惑っています。

現在、アプリケーションはデータバインディングを使用してUIとコードをリンクし、いくつかの検証ルールと値コンバーターを使用して、同様の値(日付などにそれぞれ1つずつ)で再利用できます。

MVVMを読んでいるときに、IDataErrorInfoに出くわしました。これは、検証が表示されないようにするため、バインディングなどを設定する際の繰り返しコードをわずかに減らし、より具体的なエラーメッセージを表示できるので魅力的です。

一方、ValidationRulesは、検証が失敗した場合にバインディングデータの転送をブロックします。これは、モデル値に新しい有効な値を変更するだけでよいため、必要です。

私の主な懸念は、ビューモデルで物事を制限しすぎると、ビューで物事が難しくなることです-一般的なケースでは物事を快適なレベルに制限してから、より柔軟性が必要な特定のケースを修正することをお勧めします景色?

だから私の主な質問は、ビューモデルのプロパティに検証と変換を入れるか、検証ルールと値変換器(またはその間の妥協点)に固執する方が良いでしょうか?

4

2 に答える 2

2

を使用してビューモデルにすべての検証を実装しIDataErrorInfo、プロパティが有効かどうかに基づいて、プロパティの変更をモデルに渡すかどうかをビューモデルに決定させます。したがって、一般的なセッターは次のようになります。

public string Value
{
   set
   {
      if (value == _Value)
      {
         return;
      }
      _Value = value;
      Validate("Value");
      if (Error["Value"] == null)
      {
         Model.Value = value;
      }
      OnPropertyChanged("Value");
   }
}

ビューに検証や値変換を実装することは決してありません。それはただトラブルを懇願しているようです。

于 2010-11-24T18:50:39.893 に答える
1

組み合わせて使います。

コアの再利用可能なビジネスルールのエンティティでIdataerrorinfoを使用しています(検証はビューモデルにありません)。私のエンティティは、この方法で自分自身を検証することもできます。

次に、整数テキストボックスの入力として文字列が使用されている場合など、バインディングエラーがエンティティに到達しない場所には、viewValidationRulesを使用します。

于 2010-11-24T11:52:18.847 に答える