#c_sharp #observablecollection
Добрый день столкнулся с такой проблемой: функция IndexOf класса ObservableCollection всегда возвращает -1. Вот код: ObservableCollection- FilterMask = new ObservableCollection
- (); foreach(Worker w in ListWorker) { if(w.Directions.Count == 0) continue; Item ForFilter = new Item() { Text = w.Directions[0], IsSelected = true }; if (FilterMask.IndexOf(ForFilter) == -1) FilterMask.Add(ForFilter); } Пример класса Item: public class Item : INotifyPropertyChanged { string _Text; public string Text { get { return _Text; } set { _Text = value; if (PropertyChanged != null) PropertyChanged(this, new PropertyChangedEventArgs("Text")); } } bool _IsSelected; public bool IsSelected { get { return _IsSelected; } set { _IsSelected = value; if (PropertyChanged != null) PropertyChanged(this, new PropertyChangedEventArgs("IsSelected")); } } #region INotifyPropertyChanged Members public event PropertyChangedEventHandler PropertyChanged; #endregion } В FilterMask появляются дубликаты, чего не должно быть согласно коду=)
Ответы
Ответ 1
Разумеется, возвращает -1. Ты создаёшь новый объект класса Item и ищешь его в коллекции. Он туда ещё не добавлен. Если ты хочешь, чтобы твой код работал, перегрузи в Item методы Equals и GetHashCode. Или полноценно реализуй интерфейс IEquatable.
Комментариев нет:
Отправить комментарий