Мне необходимо, чтобы некоторые объекты реализовывали интерфейсы INotifyPropertyChanged, INotifyPropertyChanging.
Когда у объекта проперти простая (String, Int) — все хорошо:
public String name
{
get { return _name; }
set
{
if (_name != value)
{
OnPropertyChanging("name");
_name = value;
OnPropertyChanged("name");
}
}
}
private String _name = "";
Но если у объекта есть проперти типа List<T> — тут, как вы понимаете, так просто не отделаешься, потому что надо отлавливать не set а Add у самого List<T>.
Посмотрев, что у List<T> нету событий, я решил написать свой класс:
public class NotifyPropertyList<T> : List<T>, INotifyPropertyChanged, INotifyPropertyChanging
{
public event PropertyChangedEventHandler PropertyChanged;
public event PropertyChangingEventHandler PropertyChanging;
protected void OnPropertyChanged(object sender, PropertyChangedEventArgs e)
{
PropertyChangedEventHandler temp = PropertyChanged;
if (temp != null)
temp(temp, e);
}
protected void OnPropertyChanging(object sender, PropertyChangingEventArgs e)
{
PropertyChangingEventHandler temp = PropertyChanging;
if (temp != null)
temp(temp, e);
}
public new void Add(T item)
{
OnPropertyChanging(this, null);
this.Add(item);
OnPropertyChanged(this, null);
}
}
И подумал: а хорошо бы еще знать — не изобретаю ли я велосипед?
Если кто-то конструктивно покритикует или покажет такой же велосипед — буду рад