複合型のIDataErrorInfo
-
10-07-2019 - |
質問
次のように単純に定義されたAddressオブジェクトがあります:
public class Address
{
public string StreetNumber { get; set; }
public string StreetAddress { get; set; }
public string City { get; set; }
public string PostalCode { get; set; }
}
かなり簡単です。私が尋ねた別の質問へのアドバイスについては、 this 私のUIをPerson型(これはAddress MailingAddressフィールドが含まれます)。
問題は、IDataErrorインターフェイスメソッドがAddress型のプロパティを検証していないことです。
public string this[string columnName]
{
get
{
string result = null;
// the following works fine
if(columnName == "FirstName")
{
if (string.IsNullOrEmpty(this.FirstName))
result = "First name cannot be blank.";
}
// the following does not run
// mostly because I don't know what the columnName should be
else if (columnName == "NotSureWhatToPutHere")
{
if (!Util.IsValidPostalCode(this.MailingAddress.PostalCode))
result = "Postal code is not in a know format.";
}
return result;
}
}
したがって、明らかにcolumnNameがどうなるかはわかりません...私はそれをステップスルーしましたが、(組み込み型の)パブリックプロパティ以外のものではありませんでした。次のようなステートメントを実行し、壊すことさえ試みました:
if (columnName.Contains("Mailing") || columnName.Contains("Postal"))
System.Windows.Forms.MessageBox.Show(columnName);
すべて無効です。
足りないものはありますか?
解決
エラーメッセージを提供するすべてのクラスでIErrorInfoを定義する必要があります。
他のヒント
私の回答をご覧ください。
モデルバインダーを使用して、 IDataError
を使用せずにモデルの「クラスレベル」チェックを追加する方法を説明します。 [必須]属性または他のカスタム検証属性を引き続き使用できますが、個々のモデルエラーを追加または削除できます。データ注釈の使用方法の詳細については、 Scott Guからのこの投稿。
所属していません StackOverflow