6

プロパティの 1 つとして Phone オブジェクトを持つ ViewModel クラスがあり、メイン ウィンドウのデータ コンテキストは ViewModel に設定されています。基になる Phone モデル クラスまたは Phone プロパティを含む ViewModel クラスに IDataErrorInfo を実装する必要がありますか?

また、検証しようとしているテキスト ボックスを ViewModel.NewPhone.StringProperty にバインドする正しい方法は何でしょうか?

どうもありがとう

4

1 に答える 1

9

どこに実装するかの決定は、IDataErrorInfo実際にはアプリケーションのロジックによって異なります。たとえば、Phone無効な電話番号を許可しない方法でクラスを実装することができますが、ビューモデルでは米国からの番号のみを許可したいと考えています。

通常、IDataErrorInfoモデルとビューモデルの両方に実装することをお勧めします。ビューモデルでエラーが検出されなかった場合は、リクエストをモデルに転送します。次に、通常どおりビューモデルにバインドします。

public string this[string propertyName]
{
    get
    {
        if (propertyName == "PhoneNumber")
        {
            if (!IsUSNumber(PhoneNumber))
            {
                return "Non-US number.";
            }
        }

        // No validation errors found by the viewmodel
        // Forward to model's IDataErrorInfo implementation
        return Model[propertyName];
    }
}

電話番号の形式など、すべての電話に関連する基本的な検証をモデルに実装し、ビューモデルにビューごとに異なる可能性のあるビュー固有の検証を実装することをお勧めします。たとえば、米国の電話番号または所属する番号のみを許可するなどです。特定のプロバイダーに。

于 2012-10-29T07:59:08.137 に答える