不同视图模型中共享的对象集合

本文关键字:对象 集合 共享 视图 模型 | 更新日期: 2023-09-27 17:51:17

在Wpf应用程序中,我有一个通过套接字接收的对象集合。实际上,这个集合是由一个Dictionary<Int, IMyObject>组成的,当一个对象在套接字上接收到时,它会定期填充/更新。我有4个不同的ViewModel得到这个集合的一个子集(我有一个MyObjectHolder它是一个静态实例保存这个项目我得到它的一个子集做一些事情

public IList<MyObject> ListTypeOne
{
    get
    {
        myList.Where(x => x.Type == myType)
    }
}

每次插入/更新一个项目时,我发送从TypeOneTypeN的所有属性的NotifyOfPropertyChanged

有没有更好的实现是我没有看到的?

我没有对它进行压力测试,但我不知道当集合中有大量对象时它的性能如何

不同视图模型中共享的对象集合

我不确定这是否是最好的解决方案,但这是我要做的。

  1. 创建一个集合的静态实例(你已经这样做了)
  2. 有一个服务,或者一些会定期更新你的收集(你已经这样做了)
  3. 向所有viewmodel推送通知,强制它们刷新绑定。(棘手的部分)

现在,有几种方法可以处理第三个问题。其中一个方法是使用Caliburn Micro的事件聚合器。你可以在这里找到。

本质上,它所做的就是允许你的ViewModels 订阅事件。您的服务或正在更新您的集合的其他服务将发布事件,并将调用所有订阅者。很酷,对吧?

这允许你保持你的ViewModels漂亮和解耦,这是MVVM喜欢的。

现在,我不是说你必须屈服并安装Caliburn Micro(如果你不这样做,我不会责怪你)。你没有理由不能实现你自己的事件聚合器,如果你使用正确的搜索词,可能有大量的教程和示例代码你可以找到。

就我个人而言,我不是一个使用框架的超级粉丝,它只是感觉很脏,但这取决于我的个人偏好。

但无论如何,试一试,看看什么适合你。