【发布时间】:2015-10-13 15:00:28
【问题描述】:
我的虚拟机实现了 INotifyPropertyChanged 接口。我创建了另一个线程 T 来填充我绑定到 Xaml 的列表。填充列表后,我在线程 T 中调用 PropertyChanged,并且我的 UI 被正确刷新。
我的问题是在什么情况下我需要使用 Dispatcher?为什么我不需要在我的情况下使用 Dispatcher?我认为当其他线程中的代码想要通过将更改排队到 UI 刷新队列来通知 UI 线程的更改时使用 Dispatcher,例如从另一个线程将项目添加到 ObservableCollection,然后 UI 线程将从队列中提取数据.
private List<string> _ListData;
public List<String> ListData
{
get
{
if (_ListData == null)
Initialise( () => ListData = ReturnSlow());
return _ListData;
}
set { _ListData = value; }
}
private List<string> ReturnSlow()
{
List<string> Test = new List<string>();
Test.Add("1");
Test.Add("2");
Thread.Sleep(2000);
return Test;
}
public void Initialise(Action initialiser)
{
Task t = new Task(() =>
{
initialiser();
if (PropertyChanged != null)
PropertyChanged(this, new PropertyChangedEventArgs("ListData"));
});
t.Start();
}
【问题讨论】:
-
只有当您的集合是 ObservableCollection 时,您才必须使用它