如何在线程中的Observable集合中复制列表

时间:2016-03-22 12:03:00

标签: c# list data-binding observablecollection

我有一个后台工作人员填写/重新填充列表,在重新填写和编辑列表后,我将此列表复制到一个可观察列表中:

this.OBSMailCountList = new ObservableCollection<IMailCount>(_allMailCounts);

问题是该集合绑定到Live Diagramm并且在列表中复制之后我得到了

错误

“值不能为NULL”。

我的问题是:

如何在线程中使用绑定复制可观察集合?

2 个答案:

答案 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));