首页 > 解决方案 > 事件发布和订阅如何在 ON DEMAND 环境中工作

问题描述

我在 SoftwareViewModel 构造函数中订阅了一些事件,我想以某种方式将特定视图和 Viewmodel 移动到单独的 MODULE 中并按需进行

但是为了使事件发布和订阅工作我们需要在应用程序加载时加载该 SoftwareViewModel,即为了使 SoftwareViewMOdel 的订阅工作。

那么事件发布和订阅如何在 ONDEMAND Viewmodel 概念中工作。

我的想法是否可行,因为 SoftwareViewModel 的行为取决于我们登录应用程序时加载的设置。

**//Want to make this viewmodel ON DEMAND**
public SoftwareViewModel()
        {
        **//Event that is going to subscribed**
             SubscriptionToken subscriptionValidate = this.eventAggregator.GetEvent<PubSubEvent<IValidate>>().Subscribe(i =>
            {
               //CODE HERE
            });
        }

关于 On Demand 的一些解释: On Demand 我今天的意思是我有两个选项卡 1 和 2。我希望我的选项卡 2 的东西应该在我单击选项卡 2 时加载,即 SoftwareViewModel OnDemand。

但我的选项卡 -1 有一些设置对 SoftwareViewModel 即选项卡 2 产生影响。为了做到这一点,我使用事件订阅和发布来共享选项卡 1 和 2 之间的数据。

但我想在点击 tab-2 时做所有事情。

问题:是否可以通过事件发布和订阅来按需制作 SoftwareViewModel 即 tab-2,因为根据我的研究,发布仅在订阅首先注册时才有效。

如果需要更多描述,请告诉我。

标签: c#wpfxamlmvvmprism

解决方案


您的理解是正确的;典型的 pub/sub 应用程序中的订阅将仅接收在订阅建立后发布的事件。

这就是为什么 pub/sub 基本上从来都不是视图(模型)接收数据的唯一方式。

为了更清楚,让我们从第二个用例开始。即tab-2入。永远不会被创建。那你怎么得到数据呢?不仅没有在正确的时间订阅,而且它正在寻找的事件从未发布过!tab-1tab-2

此外,在第三种情况下,saytab-1实际上是一个不同的过程。tab-2可能对在进程开始之前发生的事件感兴趣!

所有用例的解决方案都是相同的;视图(模型)(tab-2此处)必须能够查询系统的当前状态。“获取,然后订阅其余部分。” 查询和响应可以通过您的 pub/sub 系统(已经构建,它的工作量很大),也可以通过其他方法。

TL;DR:您不能仅仅依靠简单的发布/订阅来获取初始数据。


推荐阅读