【问题标题】:How Event Publishing and Subscription work in ON DEMAND Environment事件发布和订阅如何在 ON DEMAND 环境中工作
【发布时间】:2018-07-25 04:52:53
【问题描述】:

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

但为了使事件发布和订阅正常工作,我们需要在应用程序加载时加载该 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 的一些解释: 按需我今天的意思是我有两个标签 1 和 2。我希望我的标签 2 的东西应该在我点击标签 2 时加载,即 SoftwareViewModel OnDemand。

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

但我想在点击 tab-2 时完成所有操作。

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

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

【问题讨论】:

  • 请解释一下,on demand,这是一个非常松散的概念,你没有很好地定义它
  • @TheGeneral 更详细地更新了我的问题,请查看

标签: c# wpf xaml mvvm prism


【解决方案1】:

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

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

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

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

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

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

【讨论】:

  • 感谢您解决我的问题,如果我根据您总结这一点,我也理解您的概念,我认为是否可行..我还想在我的案例选项卡中添加一件事-1 将始终首先加载...
  • 对我来说,这看起来是一个逆向工程过程,因为如果用户没有点击 tab-2,那么我会以任何方式从 tab-1 丢失已发布的项目来处理这个问题????
  • @mswebappdev 我不确定这与逆向工程有什么关系,但鉴于您的第二条评论,我不确定您确实理解我在说什么。您不会丢失来自 tab-1 的已发布项目,因为 tab-2 不能是唯一接收它们的对象。您必须将该数据存储在某处(至少在另一个类中,通常是实际持久性),以便当 tab-2 出现时它可以获取该状态。
猜你喜欢
  • 1970-01-01
  • 2019-05-07
  • 1970-01-01
  • 2020-09-20
  • 2016-10-06
  • 2015-09-12
  • 1970-01-01
  • 1970-01-01
  • 2017-11-19
相关资源
最近更新 更多