2016-03-22 8 views
0

ich einen Hintergrund Arbeiter haben, die/füllt eine Liste füllt und nach dem Nachfüllen und Bearbeiten der Liste I kopieren Sie diese Liste in einer beobachtbaren Liste:Wie Liste kopieren in beobachtbare Sammlung in Thread

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

Das Problem ist, dass die Sammlung ist mit einem Live-Diagramm binden und nach dem Kopieren in der Liste erhalte ich die

Fehler:

„der Wert kann nicht NULL sein“.

Meine Frage ist:

Wie eine beobachtbare Sammlung mit Bindungen in einem Thread kopieren?

Antwort

1

Ihr Problem ist, dass Sie _allMailCounts == null im Moment haben Sie beobachtbaren Sammlung Konstruktor aufrufen. Sie können wie diese Below

if(_allMailCounts != null) 
    OBSMailCountList = new ObservableCollection<IMailCount>(_allMailCounts); 

für null überprüfen die Antwort auf Frage „wie mit ObservableCollection von einer anderen Lauffläche arbeiten“:


Binden an beobachtbaren Sammlung wie üblich definiert

ObservableCollection<IMailCount> _collection = new ObservableCollection<IMailCount>(); 
public ObservableCollection<IMailCount> Collection 
{ 
    get { return _collection; } 
    set 
    { 
     _collection = value; 
     OnPropertyChanged(); 
    } 
} 

in einem anderen Thread funktioniert auf diese Weise:

// 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)); 
1

Dispatcher.Invoke(Action) wird verwendet, um den Anruf an den UI-Thread zu machen.

Dispatcher.Invoke(() => 
{ 
     // Set property or change UI compomponents.   
     OBSMailCountList = new ObservableCollection<IMailCount>(_allMailCounts); 
});