2009-03-22 6 views
0

У меня есть два списка со всеми проектами и один с активными проектами.Связывание коллекции ViewModel в Silverlight

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

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

ответ

3

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

+0

Просьба привести пример? –

2

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

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

EDIT: Если только я прочитал полный заголовок и понял, что он говорит о Silverlight ... Silverlight не имеет публичной реализации ICollectionView и CollectionViewSource, и только Datagrid использует интерфейс в любом случае. Кто бы ни проголосовал, пожалуйста, отмените его, это не очень хороший ответ на вопрос.

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

+0

Нет CollectionViewSource для создания CollectionView в Silverlight. –

+0

Да, я просто это понял. Я пропустил часть названия (большие буквы наверху), в котором говорилось «серебристый свет». Извини за это. –

0

Я бы использовал две коллекции, основной список и список активных проектов. Тогда подпишитесь на collection changed события на главном списке, всю обработку actions

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