c# wpf MVVM 从 ObservableDictionary 获取 ObservableList

标签 c# wpf linq mvvm observablecollection

我的应用程序速度存在一些问题,并进行了一些性能分析。结果表明,我的应用程序中有很多时间用于 linq 查询,尤其是模型的 ID。我的想法是创建一个可观察的字典,其中 ID 作为键,模型作为值。这工作得很好,比 linq 查询快得多

.Any(x => x.ID == id)

或 linq 查询
.First(x => x.ID == id)

作为 ObservableDictionary 我使用了这个样本

http://blogs.microsoft.co.il/shimmy/2010/12/26/observabledictionarylttkey-tvaluegt-c/

现在的问题是我需要创建一个可以绑定(bind)到我的 View 的 ObservableCollection。我尝试使用 ObservableValue 属性扩展 ObservableDictionary 但这不起作用
     public ObservableCollection<TValue> ObservableValues
    {
        get
        {
            if (observableValues == null)
            {
                lock (lockObject)
                {
                    if (observableValues == null)
                        observableValues = new ObservableCollection<TValue>(Dictionary.Values);
                }
            }
            return observableValues;
        }
    }

当我将模型添加到我的字典或更新模型时,绑定(bind)到 View 的 ObservableCollection 不会更新。

最佳答案

我能想到的最佳解决方案是保留您的 ObservableDictionnary一个 ObservableCollection包含字典的所有值。

然后您必须更改您的类,以便当您在字典中插入/更新/删除一个值时,它在 ObservableCollection 中的作用相同。因此,触发事件以更新 View 。

关于c# wpf MVVM 从 ObservableDictionary 获取 ObservableList,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43371237/

相关文章:

c# - 有人偷了我的分钟 :/

c# - ExcelDataReader for C# 是否需要在目标计算机上安装 Excel?

c# - 自定义类中 Linq to SQL 的 DeleteOnNull(关联属性)?

c# - Windows 8 上列表框项目选择周围的白框

wpf - 单击父窗口时,如何将父窗口置于子无模式对话框前面

wpf - 如何将列表框选定的项目内容绑定(bind)到文本框?

linq - 另一个排列词难题…与Linq一起吗?

c# - 如何使用 Unity 多播 UDP 套接字改进数据同步

c# - "It was not possible to find any compatible framework version"与 ASP.NET Core 2.2

wpf - 如何根据所需的客户区大小设置 WPF 窗口的大小?