2015-06-01 3 views
0

в приложении Wpf У меня есть коллекция объектов, полученных через сокет. Фактически эта коллекция состоит из Dictionary<Int, IMyObject> И она периодически заполняется/обновляется, когда объект получен в сокете. Я 4 различных ViewModel сек, что получает часть этой коллекции (я имею в MyObjectHolder, который является статическим экземпляром проведения этого пункта, и я получаю подмножество этого делать что-то, какКоллекция объектов, разделяемых в разных моделях просмотра

public IList<MyObject> ListTypeOne 
{ 
    get 
    { 
     myList.Where(x => x.Type == myType) 
    } 
} 

Каждый раз, когда пункт, вставляется/обновляется, я посылаю NotifyOfPropertyChanged всех свойств от TypeOne до TypeN.

есть ли более эффективное осуществление, что я не вижу?

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

+2

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

ответ

1

Я не уверен, является ли это лучшим решением, но вот что я буду делать.

  1. Создать статический экземпляр коллекции (Вы сделали это уже.)
  2. Есть услуги или то, который будет периодически обновлять свою коллекцию (Вы сделали это уже)
  3. Нажимайте уведомления всем ViewModels, чтобы заставить их обновить свои привязки. (Хитрость)

Теперь, Есть несколько способов, вы можете обрабатывать номер 3. Один из этих способов заключается в использовании Caliburn Micro событие агрегатор. Вы можете узнать об этом here.

По сути, что это такое, позвольте вашим ViewModels подписаться на событие. Ваш сервис или что-то еще, что обновляет вашу коллекцию, будет опубликовать событие, и все абоненты будут вызваны. Довольно круто, не так ли?

Это позволяет сохранять ваши ViewModels красивыми и развязанным, что и нравится MVVM.

Теперь я не говорю, что вы должны загромождать и устанавливать Caliburn Micro (я бы не стал винить вас, если вы этого не сделали). Нет причин, по которым вы не можете реализовать свой собственный агрегатор событий, черт возьми, есть, вероятно, множество учебников и пример кода, который вы можете найти, если используете правильные условия поиска.

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

Но так или иначе, попробуйте и посмотрите, что сработает для вас.

+0

Спасибо, что решение vette, связанное с изменением свойства, обработчиком – advapi

+0

Btw Ive использует калибр в прошлом, теперь я переезжаю в Catel. .. другой мир – advapi

Смежные вопросы