MVVM: Что делать, если модель постоянно изменяется фоновым потоком? - PullRequest
3 голосов
/ 23 июня 2010

Это большая проблема для меня.Я хочу написать приложение WPF / MVVM, которое извлекает данные из онлайновой службы WCF.

Проблема в том, что процесс извлечения должен длиться, скажем, каждые 15 секунд (это приложение, критичное ко времени).

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

Как мне поступить?Очистка ObservableCollection во ViewModel не может быть правильной, или это так?

Ответы [ 2 ]

5 голосов
/ 23 июня 2010

Подход и возобновление изменений изменений в ObservableCollection может быть подходом:

См. Ответ: ItemsControl.ItemsSource MVVM производительность

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

1 голос
/ 23 июня 2010

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

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

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

Чтобы управлять безопасностью потоков, вам придется вводить любой код, который прямо / косвенно (включая внесение изменений в свойства ViewModel)которые в свою очередь обновляют представление) изменяют представление в методе Dispatcher.Invoke.

...