2016-04-27 3 views
0

Ich habe eine Frage zum Vergleich von ObservableCollections. Grundsätzlich habe ich in meinem Szenario eine Business-Logik-Methode, die eine Reihe von Elementen aus der Datenbank für den aktuellen Benutzer in Form von ObservableCollection erhält. In regelmäßigen Abständen sollte ein BackgroundWorker Benutzerelemente aus der Datenbank mithilfe der oben genannten Methode abrufen, sie auf Änderungen vergleichen und, falls sie erkannt werden, eine Aktualisierung der Benutzeroberfläche auslösen. Das Problem besteht darin, dass die ObservableCollections immer unterschiedlich sind, auch wenn keine Änderungen an Daten in DB vorgenommen wurden.Vergleichen von ObservableCollections für alle Änderungen

Methode in Background verwendet:

private void UpdateItemList(object sender, DoWorkEventArgs e) 
{ 
    const int updateInterval = 30000; 

    while (isItemWorkerRunning) 
    { 
     Thread.Sleep(updateInterval); 
     Application.Current.Dispatcher.Invoke(() => ForceUpdateItemList()); 
    } 
} 

private void ForceUpdateItemList() 
{ 
    var userItems = GetItems(userId); 

    if (lastUserItems!=userItems) 
    { 
     //force update 
     lastUserItems = userItems; 
     //update UI 
    } 
} 

Was mache ich falsch?

Antwort

1

Ich nehme an, dass die Methode GetItems (userId) eine neue Observable-Sammlung zurückgibt, und da es sich um einen Referenztyp handelt, sind sie nicht gleich. Das neue userItems-Objekt unterscheidet sich vom lastUserItems-Objekt, sodass die Gleichheit fehlschlägt.

In Ihrem Fall wäre es am besten, die Daten in lastUserItems mit den Daten in userItems zu vergleichen, um nach Änderungen zu suchen.

Vielleicht möchten Sie diese Frage (Check if two collections are equal) seit seiner ganz ähnlichen

betrachten
Verwandte Themen