2016-12-20 6 views
1

Ich habe zwei ObservableCollections, eine mit einer aktuellen Liste von Mitarbeitern und eine mit einer neuen. Wenn der neue einen Angestellten enthält, der nicht in der alten Liste ist, möchte ich ihn zu der alten Liste hinzufügen.Vergleichen von Objekten in zwei ObservableCollections

Wenn die neue Liste keinen Mitarbeiter in der alten Liste enthält, möchte ich ihn aus der alten Liste entfernen. (Ich hoffe das ergibt Sinn).

Hier ist was ich versucht habe;

foreach (var employee in _currentUsers.ToList()) 
{ 
    if (!newUsers.Contains(employee)) 
    { 
     Dispatcher.Invoke(() => 
     { 
      _currentUsers.Remove(employee); 
      CurrentUsageDataGrid.Items.Refresh();      
     }); 
    } 
} 

foreach (var employee in newUsers) 
{ 
    if (!_currentUsers.Contains(employee)) 
    { 
     Dispatcher.Invoke(() => 
     { 
      _currentUsers.Add(employee); 
      CurrentUsageDataGrid.Items.Refresh(); 
     }); 
    } 
} 

Das funktioniert nicht so, auch wenn ich weiß, dass die Listen der Dispatcher.Invoke() noch nicht geändert haben, feuert. Bin ich falsch verstanden, wie Contains funktioniert und/oder gibt es eine "bessere" Art, einen solchen Check durchzuführen?

Antwort

1

Hat Ihr Mitarbeiter Klasse IEquatable<T>-Schnittstelle implementieren, enthält die Methode von ObservableCollectionEqual in diesem Interface-Objekt vergleichen verwenden. Andernfalls müssen Sie Linq verwenden für bestehende Mitarbeiter zu überprüfen, statt mit Contains

Weitere Bezug auf MSDN, https://msdn.microsoft.com/en-us/library/ms132407(v=vs.100).aspx

1

Wie bereits erwähnt wurde, über die Sie implementieren müssen/für den Vergleich eines Equal-Methode überschreiben. Wenn Sie eine "Enthält" -Kontrolle für 2 Klassenobjekte durchführen, überprüft es, ob die 2 Objekte gleich sind (nicht, wenn ihre Eigenschaften sind). Sie können die Gleichheit mit einer ID machen, oder Sie könnten einen Hashwert berechnen und diese vergleichen.

Verwandte Themen