在我使用 MVVM 模式编写的 WPF 应用程序中,我有一个后台进程来做这件事,但需要从它获取状态更新到 UI。
我正在使用 MVVM 模式,因此我的 ViewModel 几乎不知道将模型呈现给用户的视图 (UI)。
假设我的 ViewModel 中有以下方法:
public void backgroundWorker_ReportProgress(object sender, ReportProgressArgs e)
{
this.Messages.Add(e.Message);
OnPropertyChanged("Messages");
}
在我看来,我有一个 ListBox 绑定到List<string>
ViewModel 的 Messages 属性 (a)。 通过调用 aOnPropertyChanged
来完成接口的作用。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;
}
但这没有用。有任何想法吗?