MVVM с постоянно обновляемыми данными

В настоящее время я работаю над приложением Windows Store (8.1), которое должно выполнять следующие действия:

  • Поговорите с USB HID-устройством (разобрался)
  • Отображение данных с этого устройства (я хочу использовать Oxyplot для отображения этих данных, понял)
  • Использовать MVVM (я выбрал набор инструментов SimpleMVVM, так как в нем уже есть шаблоны для VS2013)
  • Создайте фиктивный поставщик данных, который генерирует случайные данные и передает их моей ViewModel

Теперь я застрял здесь относительно того, где поместить данные. Я использую очередь для хранения своих значений (я всегда хочу, чтобы отображались последние 100 значений). Теперь, что я помещаю в модель и что я помещаю в ViewModel.

Например, я бы поместил Очередь, содержащую точки данных, в мою ViewModel? Как бы я правильно запустил процесс "Получать данные каждые 1 секунду". Я подумал об использовании System.Threading.Threads.Timer для этого. Где бы я это положил? В агент MockDataServiceAgent? В этом случае: Как я могу получить доступ к моему ViewModel из ServiceAgent для выполнения обновления?

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

2 ответа

Решение

Ваш Model твой domain objectэто фактическое data или же information Вы имеете дело с Пример Model может быть что из Car содержащий make, model, colour и т.д. Главное здесь то, что Model поддерживает information а не поведение.

ViewModel твой presentation separation слой, он может обернуть один или несколько ваших Model объекты. Это клей между вашим View а также Model разоблачение команд и методов, которые поддерживают View состояние и может изменить состояние вашего Model как результат actions на View,

Ваш data должен поддерживаться вашим Model, или же Models, Это был бы твой ViewModel что бы разоблачить, что data и предоставить механизм для вашего View потреблять это. ObservableCollection это общий механизм для выставления коллекции data к View поскольку он динамический и предоставляет уведомления, когда в него добавлены, удалены или полностью обновлены элементы.

В идеале вы не хотите, чтобы ваши объекты имели прочные связи друг с другом, поэтому для обмена данными между объектами вы можете рассмотреть некоторую реализацию шаблона проектирования Mediator. Большинство сред MVVM имеют некоторую реализацию этого либо как Mediator или же EventAggregator шина сообщений. Они обеспечивают publish а также subscribe механизм, в котором один объект publishes уведомление, содержащее некоторые данные и один или несколько subscribed объекты получат это уведомление и обработают данные соответственно. Ни один из вовлеченных объектов не знает, кто является publisher, subscriber или кто участвует, они знают только о Mediator реализация.

Вы можете поместить свою очередь, содержащую данные в вашем ViewModelкак ObservableCollectionтогда, когда ObservableCollection изменен, он может обновлять все, к чему он привязан. Было бы лучше сохранить связь между ServiceAgent а также ViewModel слабосвязанный, я бы предложил использовать SimpleMvvmСистема сообщений, если она есть, я знаю MvvmLight (другой инструментарий Mvvm) имеет один. Или вы можете создать его самостоятельно, используя шаблон Mediator. Или, если вы не хотите использовать посредника, используйте контейнер IoC. Просто получите ваш процесс обслуживания данных, чтобы обновить ObservableCollectionи это должно отменить необходимость беспокоиться о событиях (для обновления пользовательского интерфейса).

Другие вопросы по тегам