Включает ли класс CollectionViewSource функциональность интерфейса INotifyPropertyChanged? - PullRequest
0 голосов
/ 11 марта 2011

Я написал 1 приложение WPF.Довольно простое приложение.Он прекрасно работает и в настоящее время интенсивно используется как LOB-приложение.Теперь я собираюсь начать работу над серьезной переписью старого приложения VB6 и превратить его в приложение WPF.Работая над первым приложением, я узнал об интерфейсе INotifyPropertyChanged и о том, насколько он важен для привязки данных WPF / Silverlight.Теперь меня беспокоит то, что довольно давно я написал службу WCF, предназначенную для замены старого компонента среднего уровня, который я написал в VB6 много лет назад, для старого приложения VB6.Служба WCF, которую я написал, возвращает наборы данных ADO.NET, потому что, честно говоря, я работаю с ними в течение многих лет и чувствую себя комфортно с ними.Однако теперь, когда я начинаю работать над этим новым приложением, я очень обеспокоен своей службой WCF, поскольку наборы данных ADO.NET не реализуют интерфейс INotifyPropertyChanged.

Итак, я начал искатьна другие вещи.Прямо сейчас я смотрю на Entity Framework.Я использую книгу Джулии Лерман, "Programming Entity Framework: Second Edition", и она действительно выглядит многообещающе.Я работаю над ее примером приложения WPF, в котором используется сборка EDM, которую она написала в предыдущей главе.Включение ссылок на сборки дает мне CollectionViewSource, и, по крайней мере, мне кажется, что они действуют так же, как и интерфейс INotifyPropertyChanged.

Итак, мой вопрос заключается в следующем: реализует ли класс CollectionViewSource INotifyPropertyChangedинтерфейс?Я попытался просмотреть документацию MSDN, и в нем ничего не сказано напрямую, но мне интересно, наследует ли класс DependencyObject CollectionViewSource от дубликатов той же функциональности, что и интерфейс INotifyPropertyChanged, или CollectionViewSource реализует ее?

Ответы [ 2 ]

1 голос
/ 13 апреля 2011

просто чтобы упомянуть небольшую деталь к ответу Рода:

при добавлении или удалении элемента в коллекцию элементы проходят через любой фильтр, группировку, сортировку и т. Д.

Но когда свойство существующего элемента изменяется, вы должны сами справиться с этим, чтобы обновить фильтры, сгруппировать и т. Д.

На этом этапе решение Refresh () работает НО, может принести очень плохой пользовательский опыт, так как вся коллекция обновляется.

Одним из решений является симуляция удаления / вставки элемента. Смотрите мой пост для более подробной информации.

1 голос
/ 23 марта 2011

Вы заметите, что документ MSDN на CollectionViewSource содержит это как объявление класса:

Public Class CollectionViewSource _
    Inherits DependencyObject _
    Implements ISupportInitialize, IWeakEventListener

Ни он, ни его базовые классы не реализуют INotifyPropertyChanged. Когда вы привязываетесь к View CollectionViewSource, вы должны сами вызывать его Refresh() метод , когда изменяется базовая коллекция. Если вы изменяете свойства (такие как сортировка и группировка) CVS, обновление вызывается автоматически.

...