我有一个后台工作人员填写/重新填充列表,在重新填写和编辑列表后,我将此列表复制到一个可观察列表中:
this.OBSMailCountList = new ObservableCollection<IMailCount>(_allMailCounts);
问题是该集合绑定到Live Diagramm并且在列表中复制之后我得到了
错误:
“值不能为NULL”。
我的问题是:
如何在线程中使用绑定复制可观察集合?
答案 0 :(得分:1)
Dispatcher.Invoke( Action )
将用于调用UI线程。
Dispatcher.Invoke(() =>
{
// Set property or change UI compomponents.
OBSMailCountList = new ObservableCollection<IMailCount>(_allMailCounts);
});
答案 1 :(得分:1)
您的问题是您在调用observable collection构造函数时有_allMailCounts == null
。您可以像这样检查null
if(_allMailCounts != null)
OBSMailCountList = new ObservableCollection<IMailCount>(_allMailCounts);
以下是有关问题的答案&#34;如何使用ObservableCollection
来处理另一个问题&#34;:
绑定到通常定义的可观察集合
ObservableCollection<IMailCount> _collection = new ObservableCollection<IMailCount>();
public ObservableCollection<IMailCount> Collection
{
get { return _collection; }
set
{
_collection = value;
OnPropertyChanged();
}
}
在另一个线程中以这种方式工作:
// create a copy as list in UI thread
List<IMailCount> collection = null;
Dispatcher.Invoke(() => collection = new List<IMailCount>(_collection));
// when finished working set property in UI thread
Dispatcher.InvokeAsync(() => Collection = new ObservableCollection<IMailCount>(collection));