Nice Rx способ подписки на коллекцию в коллекции - PullRequest
1 голос
/ 20 июня 2011

Я опишу свою объектную модель, затем то, что я хочу сделать.

Это приложение Silverlight, и это объекты модели, связанные с элементами пользовательского интерфейса.

Соглашениеимеет коллекцию TradingBranch, ветки могут быть добавлены или удалены.Филиал имеет коллекцию Product.

agreement.Branches
         .SelectMany(x => x.Products)
         .Distinct()

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

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

Поэтому вместо того, чтобы добавлять обработчик CollectionChanged для веток, нужно больше обработчиков для прослушивания коллекции Products, чтобы определить, является ли продуктуже есть, а затем нужно отписаться, когда ветви удаляются и т. д., я надеялся, что есть хороший синтаксис Rx, который я мог бы использовать, чтобы просто сказать: «прослушать этот фрагмент LINQ» и обновить эту другую наблюдаемую коллекцию, которую я связываюмой ListBox, когда он меняется.

1 Ответ

0 голосов
/ 20 июня 2011

Несмотря на сходство имен, IObservable и ObservableCollection совершенно не связаны и, к сожалению, также несовместимы. У них есть две очень разные модели наблюдения за коллекцией.

Взгляните на Bindable LINQ . Он пытается определить LINQ-to-ObservableCollection, так что запрос LINQ для ObservableCollection снова приводит к ObservableCollection. Проект кажется мертвым, и я еще не использовал рекомендованную замену ( Obtics ).

...