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

时间:2015-06-01 10:03:26

标签: c# wpf

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

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

每次插入/更新项目时,我都会在NotifyOfPropertyChangedTypeOne的所有属性上发送TypeN

是否有更好的实施方式,我不明白?

我没有对它进行过多的压力测试,但是当我收集了大量的物品时,我不知道它是如何表现的。

1 个答案:

答案 0 :(得分:1)

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

  1. 创建集合的静态实例(您已经完成了此操作。)
  2. 提供服务或某些定期更新您的收藏品(您已经这样做了)
  3. 将通知推送到所有ViewModel以强制它们刷新其绑定。 (棘手的部分)
  4. 现在,有几种方法可以处理3号。其中一种方法是使用 Caliburn Micro的Event Aggregator 。你可以找到它here

    基本上,它的作用是允许您的ViewModel 订阅到一个事件。您的服务或更新您的收藏的任何内容将发布该活动,并且将调用所有订阅者。很酷,对吧?

    这使您可以保持ViewModel的良好和解耦,这是MVVM喜欢的。

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

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

    但无论如何,试试看看对你有用的东西。