问题标签 [eventaggregator]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
751 浏览

event-handling - 领域事件 v 事件聚合器 v... 其他

我的域中有一个复合结构,其中叶节点(分配)有一个 DurationChanged 事件,我想在表示层视图模型结构的顶部(在 TimeSheetViewModel 中)使用该事件,我想知道最好的方法是什么去实现它。

想到的选项包括:

  1. 在 TimeSheetComposite 中订阅它。每个组合最终都由 Allocations 组成,TimeSheetComposite 是 TimeSheetViewModel 的 Model。似乎我还需要 TimeSheetComposite 中的一个事件,该事件在子 DurationChanged 事件被触发时被触发;TimeSheetViewModel 将订阅后一个事件。
  2. 忽略 DurationChanged 事件,并在 AllocationViewModel.Amount 更改时跟随冒泡到 TimeSheetViewModel 的 INPC 链。我不会有有用的信息,特别是编辑前的旧 Amount,但如果有必要,我可以足够便宜地计算所需的最终结果。
  3. 使 DurationChanged 事件成为领域事件;我目前不使用域事件,但我确实喜欢这个概念,而且看起来 Udi 的文章中有足够的代码可以开始使用它。
  4. 设置某种事件聚合器来发布和订阅 DurationChanged。我还不太确定领域事件和事件聚合器之间的区别是什么,以及它们是解决同一问题的补充方法还是替代方法。这里使用 Rx的实现看起来很有希望。

在此设计中,TimeSheetViewModel 需要知道 Allocation.Duration 何时发生更改,以便它可以按日期获得所有分配持续时间的新总数。

您将如何提供 DurationChanged 通知?

干杯,
贝里尔

领域复合结构和事件

在此处输入图像描述

表示层结构

在此处输入图像描述

0 投票
1 回答
372 浏览

eventaggregator - 使用 Prism 4 进行事件聚合

有人可以确认我对 PRISM 4 中的事件聚合是否正确吗?

在事件首先发布之前您无法订阅事件还是我错过了什么?

0 投票
1 回答
328 浏览

silverlight-4.0 - EventAggregation 快速入门?

我创建了一个 MainView,它的 DataContext 是在 xaml 中初始化的 MainViewModel。
MainView 包含一个绑定到 MainViewModel 的 Content 属性的 ContentControl。
我在 MainViewModel 构造函数中添加了一些内容,这样如果当前用户没有登录,它会自动将 LoginView(以及相应的 DataContext LoginViewModel)加载到这个 Content 属性中。

现在我的问题是,当用户成功登录后我应该怎么做:

这是怎么做到的?

注意:我更喜欢使用棱镜的EventAggregatorrathen然后其他东西,但我不知道:

  1. 如何在 ViewModel 之间展开
  2. 如何创建事件(我不需要传递参数,也不需要它是通用的,只是ActionLoginAction- 没有参数。
  3. 如何从 MainViewMode 订阅。
  4. 我不使用 MEF 或 Unity,也不使用单独的模块,我的所有应用程序都在一个程序集中。
  5. 我根本不喜欢在代码隐藏中编写任何代码
  6. VB.NET 或 C# 中的答案都欢迎相同

任何帮助都会被推荐

0 投票
2 回答
573 浏览

silverlight-4.0 - 非通用 CompositePresentationEvent 和 EventSubscription?

我正在尝试创建一个TPayLoad-free CompositePresentationEvent,它的委托是无参数的。

我想要一个不带参数的全局应用程序事件,例如UserLoggedInEventUserGotIdleEvent

这应该如何使用 Prism 4.0 事件聚合系统来完成?

0 投票
0 回答
225 浏览

.net - MethodInfo.Invoke 仅适用于 Prism EventAggregator 的调试模式

我有一个 Prism 的 EventAgregator 的扩展方法来使用反射发布事件。实现如下:

此方法调用需要类型参数的扩展方法。此代码和事件工作正常,但仅在调试模式下。当切换到发布版本时,事件永远不会到达订阅者。

我曾尝试在订阅期间使用可选参数,keepSubscriberReferenceAlive但这并不能解决问题。

关于如何解决这个问题的任何想法?

更新 我发现问题与上述无关。似乎有一个过滤器只允许来自同一程序集的事件。但这并不能解释为什么代码在调试模式下工作。

0 投票
1 回答
451 浏览

wpf - PRISM 和事件聚合器

我有一个 PRISM WPF 应用程序;我有一个 PatientViewModel,它在其构造函数中订阅一个事件(比如说 CultureChangedEvent),并执行一个动作。

在我的主视图模型中,我有一个 ObservableCollection。

如果用户从 ObservableCollection 中删除 PatientViewModel 实例,然后触发 CultureChangedEvent,则删除的 PatientViewModel 仍在内存中并接收事件。因此,目前,在删除 PatientViewModel 时,我取消了该事件的订阅;但我想知道这是正确的方法吗?还是我错过了什么?

谢谢!大号

0 投票
1 回答
380 浏览

c# - .net 2.0 的事件聚合器

在我的 .net 2.0 Win Forms 应用程序中,我想从许多不同的地方/类中引发类似 OnProgress 事件,并在一个地方处理所有这些事件。

我们正在使用 Microsoft 的 UnityContainer 进行依赖注入,我在 Composite Application Library 的 EventAggregator 中看到了一个很好的解决方案。

您能否给我一些类似于 EventAggregator 的建议,可以在 .net 2.0 下工作?

谢谢。

0 投票
1 回答
1479 浏览

.net - Prism:EventAggregator 和 MEF - EventAggregator 的 2 个不同实例

我有以下设置:

  • 跨 xaps/模块拆分的 Silverlight 应用程序
  • 我使用 MEF 作为 DI 框架来连接我的应用程序的各个部分。

  • 我有2个地区:

  • 一个(左侧)填充了列表视图(例如客户)

  • 一个(右侧)填充了一个包含选项卡控件的视图,该选项卡控件具有我填充的区域(根据选择的客户),另一个视图包含带有区域的选项卡控件。

    右侧结果: 在此处输入图像描述

为了填充第一级选项卡控件,我正在收听“客户更改事件”-(这很好用),当我收到事件时,我用视图填充第一级选项卡区域:

注意:创建 FirstLevelView 时,我必须CompositionInitializer.SatisfyImports调用以确保 FirstLevelView 解析其 ViewModel 引用。

要在 SecondLevel ViewModel 中获取 EventsAggregator 的实例,我使用:

我的问题是我在第二级视图模型中获得的 EventAggregator 实例与第一级中的 EventAggregator 实例不同,因此如果我在第一级发布 DoStuffSecondLevel 它将不会在第二级中被捕获。

为什么我会得到 2 个不同的 EventAggregator 实例?
如何在整个应用程序中共享相同的 EventAggregator 实例?

提前致谢

0 投票
1 回答
1162 浏览

c# - EventAggregator 模式:如何传递数据?

我正在考虑在我正在处理的 UI 项目(Silverlight/MVVM)上利用事件聚合器模式来支持视图/视图模型之间的松散耦合。我们已经使用一个简单的事件系统编写了一些屏幕——在这一点上它只是一个概念证明,但它看起来确实是创建松散耦合系统的一个非常优雅的解决方案。

我遇到的问题是当接收 ViewModel 尚未实例化时,将数据从一个 ViewModel 传递到另一个 ViewModel。例如,如果客户列表屏幕打开,用户可能会单击特定客户以打开编辑/查看客户详细信息屏幕(可能在子窗口中)。客户详细信息屏幕需要客户(或客户 ID)才能运行。

因此,OpenCustomerDetailEvent 包含相关的客户信息似乎是合理的,但是有哪些选项可以将该信息注入到 Customer Detail V/VM 中?由于处理事件时它还没有在内存中,所以它不能直接监听事件(它本身不能是处理程序)。我们使用依赖注入容器来创建视图和视图模型(我们目前使用“视图优先”),因此让单独的处理程序通过构造函数注入数据不是一个好的选择。

构建数据后,还有哪些其他选项可以将数据放入视图(模型)?采用强类型参数的 init 方法?使用setter注入数据?让处理程序创建 V/VM,然后分派 VM 侦听的第二个事件?

0 投票
1 回答
1672 浏览

c# - 我应该只使用事件聚合器来防止内存泄漏吗?

我们考虑使用Prism 事件聚合器来减少由于事件引用引起的内存泄漏。

  1. 这本身是使用这种模式的正当理由吗?其他好处现在对我们来说并不有趣。我们计划在模型组件而不是 UI 之间使用它。

  2. 我们的问题是一些开发人员忘记取消注册事件。我看到 Prism 有一种使用弱引用的风格,但它有局限性。另一种风格强制显式取消订阅(),这又可以被遗忘。那么如何更好呢?