Какова цель ObservableCollection, вызывающая PropertyChange элемента [Item]? - PullRequest
4 голосов
/ 08 апреля 2009

Какова цель ObservableCollection, вызывающая изменение свойства "Item []"?

Это то, что я должен делать, если у меня есть класс, реализующий INotifyCollectionChanged?

Используют ли элементы управления WPF это изменение свойства элемента [Item] каким-либо образом?

Ответы [ 2 ]

5 голосов
/ 08 апреля 2009

ObservableCollection реализует как INotifyCollectionChanged, так и INotifyPropertyChanged.

INotifyPropertyChanged используется для указания того, что свойство ObservableCollection изменилось, например, число его элементов ("Count") или элемент, доступный через индексатор коллекции ("Item[]"). Кроме того, ObservableCollection реализует INotifyCollectionChanged, чтобы указать, какой именно элемент изменился и как.

Взгляните на реализацию Mono ObservableCollection, чтобы увидеть, что именно делает ObservableCollection. Например, вот метод InsertItem:

protected override void InsertItem (int index, T item)
{
    CheckReentrancy ();

    base.InsertItem (index, item);

    OnCollectionChanged (new NotifyCollectionChangedEventArgs (
        NotifyCollectionChangedAction.Add, item, index));
    OnPropertyChanged (new PropertyChangedEventArgs ("Count"));
    OnPropertyChanged (new PropertyChangedEventArgs ("Item[]"));
}

Если вы хотите реализовать свой собственный ObservableCollection -подобный класс коллекции, кажется, что это правильный способ для реализации INotifyCollectionChanged и INotifyPropertyChanged.

0 голосов
/ 08 апреля 2009

Да Элементы управления WPF и Silverlight используют событие PropertyChange для обновления элементов управления пользовательского интерфейса. Это позволяет таким вещам, как ListView или DataGrid, автоматически обновляться в ответ на изменения их связанной ObservableCollection - или другой коллекции, реализующей INotifyCollectionChanged.

Редактировать: Что касается реализации, вам, как правило, не нужно реализовывать собственную коллекцию, поэтому не нужно беспокоиться о INotifyCollectionChanged. Для ваших классов, которые будут использоваться в ObservableCollection, вам нужно реализовать INotifyPropertyChanged. Это позволяет вашим объектам запускать событие PropertyChanged при каждом их обновлении, что позволит вашему элементу управления автоматически отображать изменение.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...