Инициировать изменение свойства DependencyProperty ViewModel с событием другого потока - PullRequest
0 голосов
/ 31 мая 2011

Я хочу изменить свойство DependencyProperty моего ViewModel из класса, который соединяет приложение с базой данных.

Этот класс вызывает события, которые должны инициировать изменение некоторых свойств в моей модели ViewModel.

Как я могу это понять?У меня нет Диспетчера Видения.

Ответы [ 2 ]

2 голосов
/ 31 мая 2011

Я предполагаю, что у вас на самом деле нет свойств зависимости на ваших моделях представления, а есть обычные свойства C #, которые вызывают событие PropertyChanged.

Если это так, у вас уже все будет хорошо.Измените ваши свойства из фонового потока (очевидно, что обычные проблемы параллелизма применимы), и когда они связаны со свойством зависимости элемента WPF, система времени выполнения позаботится о том, чтобы преобразовать изменение в соответствующий поток (с помощью объекта Dispatcher представления)

Это работает для нормальных свойств, я не уверен, что это работает для ObservableCollections.

Существуют также различные подходы для выполнения маршалинга внутри моделей представления.Самый простой способ - просто сохранить значение Dispatcher.CurrentDispatcher в конструкторе вашей модели представления.Это работает до тех пор, пока ваши представления создаются в потоке пользовательского интерфейса.

1 голос
/ 31 мая 2011

Одним из непосредственных решений проблемы является захват диспетчера представления и сохранение его в модели представления при его создании, чтобы можно было вызвать / инициировать изменение в нем в ответ на событие.

При этом вам следует подумать о том, чтобы ваши модели представления использовали INotifyPropertyChanged со свойствами CLR, а не DependencyProperties, чтобы избежать подобных проблем. Таким образом, любой поток может внести изменения в вашу модель представления и отразить результаты в представлении.

...