Покритикуйте простенький код )
От: Аноним  
Дата: 16.06.10 13:06
Оценка:
Мне необходимо, чтобы некоторые объекты реализовывали интерфейсы 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);
        }

    }

И подумал: а хорошо бы еще знать — не изобретаю ли я велосипед?
Если кто-то конструктивно покритикует или покажет такой же велосипед — буду рад
Re: Покритикуйте простенький код )
От: Lexxpin  
Дата: 16.06.10 13:10
Оценка: 2 (1)
http://msdn.microsoft.com/ru-ru/library/ms668604(VS.90).aspx
Re: Покритикуйте простенький код )
От: _FRED_ Черногория
Дата: 16.06.10 13:33
Оценка: +2
Здравствуйте, Аноним, Вы писали:

А>Посмотрев, что у List<T> нету событий, я решил написать свой класс:

А> public class NotifyPropertyList<T> : List<T>, INotifyPropertyChanged, INotifyPropertyChanging


"Свои" коллекции добрые люди наследуют от Collection<T> или другого подходящего класса в System.Collections.ObjectModel. Толка в наследовании от List<> нет никакого.

А>И подумал: а хорошо бы еще знать — не изобретаю ли я велосипед?

А>Если кто-то конструктивно покритикует или покажет такой же велосипед — буду рад

Есть ObservableCollection&lt;T&gt;, но она не предоставляет готовой возможности для перехватки каких-либо (того же PropertyChanged) событий от элементов коллекции. Если такового не нужно, то можно использовать её. Если нужно, то её придётся немножечко допилить.
Help will always be given at Hogwarts to those who ask for it.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.