WPF Prism 仅将事件发送到活动选项卡

Posted

技术标签:

【中文标题】WPF Prism 仅将事件发送到活动选项卡【英文标题】:WPF Prism send Event only to active Tabs 【发布时间】:2012-06-12 08:46:04 【问题描述】:

我有一个 WPF Prism 应用程序,例如我要编辑的几个客户。因此,例如,我有 5 个标签供 5 个客户使用。 每个客户都有 5 个子选项卡,例如设置、详细信息等。

当我加载或更新客户时,我希望发布到每个子选项卡的 prism 事件得到更新。 唯一的问题是:其他子选项卡也将与同一客户一起更新......这不是计划:D

那么是否有可能只有活动选项卡和那些视图模型可以订阅事件,或者类似的东西?

感谢您的帮助!

【问题讨论】:

【参考方案1】:

不久前我做过类似的事情

我不记得确切的细节,但是标签订阅了带有LoadConsumerMessage 的事件,并且消息除了通常的消息属性之外还有两个额外的属性:Id 字段和IsHandled 字段。

如果我想要一个特定的标签来加载消费者,我会用我想要的标签的 ID 填充 Id。例如,要在当前选项卡中加载客户,我会使用

// Id was typically a Guid
var event = new LoadConsumerEvent()  Id = this.Id; ;

然后在处理事件的订阅者中,如果事件不匹配,我会忽略它

if (e.Id == Guid.Empty || e.Id == this.Id)

    // Load Customer

如果我只希望第一个可用选项卡来处理事件,我会在第一个订阅者中设置 IsHandled 属性,如果该事件为真则忽略该事件

if (e.IsHandled)
    return;

// Do processing

e.IsHandled = true;

【讨论】:

嘿,这意味着每次都将事件发送到每个选项卡,然后在基类中决定订阅的位置,是否应该处理。这对我来说似乎不是一个令人满意的解决方案:/ @inxs 我想我明白你在说什么。每个选项卡不是它自己的 ViewModel 是否有原因,该 ViewModel 包含对子选项卡 ViewModels 的引用?你甚至不需要那样的事件 我更喜欢封装的 tab-sub-tab 结构的原因是,不需要以任何方式将视图引用到 viewmodel,因此必须将某些属性更改为 public 等。我只是认为用 prism 事件来做这个会是一种“更顺畅”的方式。

以上是关于WPF Prism 仅将事件发送到活动选项卡的主要内容,如果未能解决你的问题,请参考以下文章

WPF - Prism 7.1 - 导航 - 掌握选项卡控件 - 模态/对话框窗口

是否可以仅将错误日志发送到事件中心?

WPF Prism 将参数从 idialog 发送回视图

如何从 Azure 流分析仅将数据发送到一个 Azure SQL 数据库表?

带有片段的 Android Up 按钮未显示完整片段

Firebase 自定义事件未显示在控制台事件选项卡上