http://lukepuplett.blogspot.com/2009/05/updating-ui-from-asynchronous-ops.html
ложении WPF, которое я пишу с использованием шаблона MVVM, у меня есть фоновый процесс, который делает свое дело, но мне нужно получать обновления статуса от него до пользовательского интерфейса.
Я использую шаблон MVVM, так что моя ViewModel практически ничего не знает о представлении, которое представляет модель пользователю.
Скажем, у меня есть следующий метод в моей ViewModel:
public void backgroundWorker_ReportProgress(object sender, ReportProgressArgs e)
{
this.Messages.Add(e.Message);
OnPropertyChanged("Messages");
}
На мой взгляд, ListBox привязан к свойству Messages (List<string>
) из ViewModel.OnPropertyChanged
выполняет рольINotifyPropertyChanged
интерфейс, вызвавPropertyChangedEventHandler
.
Мне нужно убедиться, чтоOnPropertyChanged
вызывается в потоке пользовательского интерфейса - как мне это сделать? Я пробовал следующее:
public Dispatcher Dispatcher { get; set; }
public MyViewModel()
{
this.Dispatcher = Dispatcher.CurrentDispatcher;
}
Затем добавив следующее кOnPropertyChanged
метод:
if (this.Dispatcher != Dispatcher.CurrentDispatcher)
{
this.Dispatcher.Invoke(DispatcherPriority.Normal, new ThreadStart(delegate
{
OnPropertyChanged(propertyName);
}));
return;
}
но это не сработало. Есть идеи?