I found an nice code example for type validation:
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;
}
}
Now I want do make it more generic, so I need to create the 2 values below at runtime:
private T? _value;
private T? _originalValue;
because I want to do something like:
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;
}
}
So I can use it like this:
public class PersonViewModel : ViewModelBase
{
private Person _person;
private ItemModel _lastname;
private ItemModel _birthdate;
private bool _isNew;
// Otherstuff
}
Any suggestions on how to do this? (Some example code snippets or links would be nice)
You need to use generics: