В приложении WPF, которое я пишу, используя шаблон MVVM, у меня есть фоновый процесс, который делает это, но вам нужно получить обновления статуса из него в пользовательский интерфейс.
Я использую шаблон MVVM, поэтому моя ViewModel практически ничего не знает о представлении (UI), представляющем модель для пользователя.
Скажем, у меня есть следующий метод в моей модели ViewModel:
public void backgroundWorker_ReportProgress(object sender, ReportProgressArgs e)
{
this.Messages.Add(e.Message);
OnPropertyChanged("Messages");
}
На мой взгляд, у меня есть ListBox, связанный с свойством Messages (a List<string>
) ViewModel. OnPropertyChanged
выполняет роль интерфейса INotifyPropertyChanged
, вызывая PropertyChangedEventHandler
.
Мне нужно убедиться, что OnPropertyChanged
вызывается в потоке UI - как это сделать? Я пробовал следующее:
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;
}
но это не сработало. Любые идеи?