wpf MVVM ObservableCollection - PullRequest
       1

wpf MVVM ObservableCollection

0 голосов
/ 12 июня 2011

У моей модели есть пара свойств, одно из которых является строкой, а другое - наблюдаемой коллекцией. Когда модель создается, она запускает поток фонового работника, чтобы в основном опросить .dll для данных. Основываясь на данных, которые он получает, он либо устанавливает строку и / или добавляет и элемент в наблюдаемую коллекцию. Кажется, что мое строковое свойство запускает изменение Onproperty, и представление обновляется. Тем не менее, моя наблюдаемая коллекция создает перекрестное исключение. Я попытался переместить код, где я установил ObesrvableCollection в worker.ReportProgress и получаю ту же ошибку. Я переместил логику в модель представления и все еще получаю ту же ошибку потока. Я не уверен, почему мое свойство строки работает для одного. Я читал о Dispatcher.Invoke, но я уверен, что моя модель не должна знать об этом. Может кто-нибудь объяснить правильный путь по этому поводу, пожалуйста.

Просто к вашему сведению - мой взгляд не связан напрямую с моей моделью. У меня есть свойство для моей модели в моей viewModel, и модель передается через конструктор. Просто хочу представить это, пока кто-нибудь не подумал, что моя модель говорит напрямую с представлением.

Ответы [ 2 ]

1 голос
/ 12 июня 2011

Как сказал Кент, если вы не используете пользовательский интерфейс, вам необходимо использовать Dispatcher для обновления вашей коллекции:

Application.Current.Dispatcher.Invoke(new Action(() =>
{
    // update your ObservableCollection here
}));
1 голос
/ 12 июня 2011

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

Нет никаких причин, по которым ваша виртуальная машина не может использовать Dispatcher или, возможно, более общий SynchronizationContext, если вы предпочитаете.Однако это может усложнить тестирование.

Если вы публикуете код, может быть способ упростить вещи.

...