Привязки коллекции ViewModel в Silverlight - PullRequest
0 голосов
/ 22 марта 2009

У меня есть два списка, один со всеми проектами и один только с активными проектами.

У меня есть одна наблюдаемая коллекция, в которой все мои проекты связаны со списком всех проектов. Что мне связать с другим списком? Нужно ли создавать новую коллекцию и сортировать активные. И когда я добавляю новый активный проект, мне нужно добавить его в обе коллекции.

Нужное мне поведение - привязать новый проект к коллекции со всеми проектами, чтобы оба списка были обновлены. Можно ли сделать что-то подобное?

Ответы [ 3 ]

3 голосов
/ 22 марта 2009

Если у вас есть две коллекции, вы можете подписаться на событие CollectionChanged в основной коллекции и использовать уведомления для синхронизации другого списка.

2 голосов
/ 23 марта 2009

Вы сможете выполнить это с CollectionView . CollectionView инкапсулирует сортировку и фильтрацию.

В вашем случае, если вы создадите CollectionView, который отфильтровывает неактивные проекты в вашей основной коллекции и свяжет второй список с этим представлением, у вас все получится.

РЕДАКТИРОВАТЬ: Если бы я только прочитал полное название и понял, что он говорил о Silverlight ... Silverlight не имеет ни публичной реализации ICollectionView, ни CollectionViewSource, и в любом случае только Datagrid использует интерфейс. Тот, кто проголосовал за, должен отменить его, это не очень хороший ответ на вопрос.

Думаю, я вернусь к чертежной доске. Прямо сейчас я бы сказал, что у меня будет две коллекции, и послушаю события первой (полной), чтобы - добавить / удалить из второго, когда активный элемент добавлен / удален - добавить / удалить обработчик PropertyChanged для добавленных / удаленных элементов а также - добавить / удалить в / из второй коллекции, когда свойство Active изменилось. Это грязно, но может быть достаточно пакетируемым, чтобы использовать его повторно, когда вам нужна коллекция, отфильтрованная по предикату.

0 голосов
/ 23 марта 2009

Я бы использовал две коллекции: основной список и список активных проектов. Затем подпишитесь на событие из коллекции в главном списке, обработав все действия

Кроме того, вам необходимо добавить событие в объект проекта, чтобы вы могли обрабатывать случай, когда проект переходит из активного в неактивное состояние, и наоборот, поскольку событие изменения коллекции срабатывает только тогда, когда коллекция изменяется, а не когда что-то содержит изменения.

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