「モデルデータの検証担当者」などのことがわからないため、ちょっと混乱します。それに例を与えることをMVVM - 責任者
:
を私は人と特定のデバイスとの間の関係を可視化取得しているアプリケーションを持っています。
public class Person{
public string Firstname {get; set;}
public string Lastname {get; set;}
public SomeSortOfDevice SomeSortOfDevice {get; set;}
}
public class SomeSortOfDevice{
public DateTime DeviceExpiration {get; set;}
public string DeviceSerialCode {get; set;}
//public bool IsSerialCodeValid{get{
// SomeValidationLogic()
//}
}
ビューでは、App-Userはデバイスのデータを変更できます。 いくつかのルールがあります。たとえば、DeviceExpirationがTextBoxにバインドされていますが、有効なSerialCodeが設定されている場合にのみ有効にする必要があります。
しかし、誰がSerialCodeが有効かどうかを決定しますか?モデルそのもの? ViewModel?モデルに余分なプロパティ "IsSerialValid"を保持するか、TextBoxのIsEnabledプロパティをそのルールにバインドする方法はありますか?
編集1
public class ViewModel{
public Person SelectedPerson {get; set;}
}
私は上記のモデルを使用すると思いますか厥 - ViewがSeletedPersonにいくつかのバインディングを取得します。
編集2
私はそれが私が前にそれを説明したよりも、リッテもう少しcomplicatenだと思います。デバイスがトークンであると仮定し、ユーザが何かを入力したかどうかを判断したいと思います。何か入力した場合、それは有効ですか?
検証がモデルは次のようになります(私は、現時点ではそれを持っているとして)モデルで扱われるべき場合:ユーザーが入力(または選択してくださいテキストボックスを有効にするために今すぐ
public Token{
public DateTime ExpirationDate {get; set;}
public string Serial {get; set;}
public bool IsTokenExpired{
get{
return ExpirationDate.Date < DateTime.Now;
}
}
public bool IsTokenValid{
get{
return new Regex("[0-9]{8,12}").Match().Success;
}
}
public bool IsTokenSet{
get{
return TokenSerial.Length > 0;
}
}
}
)aバインディングの日付:
<TextBox IsEnabled="{Binding SelectedPerson.Token.IsTokenValid}"/>
これはうまくいきますが、実際にはモデル内の検証ルールについては気にしません。
'ViewModel'がバリデーションを処理する必要があります – bit
バリデーションが成功した場合に実行するコマンドを表示できますか? – bit
IDataErrorInfoを見ると、WPFコントロールがそれをサポートしています。 –