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