比较ObservableCollections以获取任何更改

时间:2016-04-27 13:19:43

标签: c# .net-4.5 backgroundworker

我有一个关于ObservableCollections比较的问题。基本上,在我的场景中,我有一个业务逻辑方法,它以ObservableCollection的形式从当前用户的数据库中获取一组项目。 BackgroundWorker应定期使用上述方法从DB获取用户项,比较它们的更改,如果检测到任何项,则应触发UI上的更新。问题是,即使没有对DB中的数据进行任何更改,ObservableCollections也总是不同。

BackgroundWorker中使用的方法:

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
    }
}

我做错了什么?

1 个答案:

答案 0 :(得分:1)

我假设GetItems(userId)方法返回一个新的Observable集合,因为它是一个引用类型,它们将不相等。新的userItems对象与lastUserItems对象不同,因此相等性失败。

在您的情况下,最好将lastUserItems中的数据与userItems中的数据进行比较,以检查更改。

您可能希望查看此问题(Check if two collections are equal),因为它非常相似