タイプ検証の良いコード例を見つけました:
public class StringViewModel : ViewModelBase, IComparable
{
private string _value;
private string _originalValue;
public StringViewModel(string value)
{
_value = value;
_originalValue = value;
}
// Der eigentliche Wert.
public string Value
{
get { return _value; }
set
{
if (value != _value)
{
_value = value;
RaisePropertyChanged("Value");
HasChanges = _value != _originalValue && !(string.IsNullOrEmpty(_value) && string.IsNullOrEmpty(_originalValue));
}
}
}
public override void AcceptChanges()
{
_originalValue = _value;
HasChanges = false;
HasError = false;
}
public override void UndoChanges()
{
Value = _originalValue;
HasError = false;
}
// Muss implementiert werden, damit die Sortierung im CollectionView funktioniert.
public int CompareTo(object obj)
{
if (obj == null) return 1;
if (object.ReferenceEquals(this, obj)) return 0;
StringViewModel other = obj as StringViewModel;
return string.Compare(this._value, other._value);
}
public override string ToString()
{
return _value;
}
}
今、私はそれをより一般的にしたいので、実行時に以下の2つの値を作成する必要があります。
private T? _value;
private T? _originalValue;
私は次のようなことをしたいので:
public class ItemModel : IComparable, INotifyEXTEND
{
private ??? _value;
private ??? _originalValue;
public ItemModel(string value)
{
_value = value;
_originalValue = value;
}
public ??? Value
{
get { return _value; }
set
{
if (value != _value)
{
_value = value;
RaisePropertyChanged("Value");
HasChanges = _value != _originalValue && !(string.IsNullOrEmpty(_value) && string.IsNullOrEmpty(_originalValue));
}
}
}
public override void AcceptChanges()
{
_originalValue = _value;
HasChanges = false;
HasError = false;
}
public override void UndoChanges()
{
Value = _originalValue;
HasError = false;
}
public int CompareTo(object obj)
{
if (obj == null) return 1;
if (object.ReferenceEquals(this, obj)) return 0;
??? other = obj as ???;
return string.Compare(this._value, other._value);
}
public override string ToString()
{
return _value;
}
}
だから私はそれを次のように使うことができます:
public class PersonViewModel : ViewModelBase
{
private Person _person;
private ItemModel _lastname;
private ItemModel _birthdate;
private bool _isNew;
// Otherstuff
}
これを行う方法について何か提案はありますか?(いくつかのサンプルコードスニペットまたはリンクがいいでしょう)