【问题标题】:EventAggregator multiple fired on one eventEventAggregator 在一个事件上多次触发
【发布时间】:2016-08-21 17:13:15
【问题描述】:

我在 MainPageViewModel 上的 viewModel 调用事件之一上有代码。当我像

这样使用“TRUE”订阅时
eventAggregator type.GetEvent<UpdateUserBooksEvent>().Subscribe(str => 
{
    GetUserBooks();
}, true);

然后在不同的页面之间移动几次,然后当这个事件被调用时,它会在 MainPageViewModel 上触发几次。 (也许 MainPageVM 创建了多次?)

如果我在没有“真实”的情况下订阅

eventAggregator type.GetEvent<UpdateUserBooksEvent>().Subscribe(str => 
{
    GetUserBooks();
});

并继续浏览几页,则不会触发该事件。 (也许 MainPageVM 被垃圾收集器清除了?)。

如何让一个事件多次无效?或者在导航到 1-2 页之前触发。

【问题讨论】:

    标签: c# uwp prism windows-10-universal


    【解决方案1】:

    true 表示keepSubscriberReferenceAlive - 即如果您传递了true,您的订阅者将收到该事件,即使他现在应该已经死了,因为它不再被引用。这意味着,如果您发布事件,所有曾经订阅的订阅者(使用true)都将收到该事件。如果您从视图 A 导航到视图 B,并且每次订阅新的视图模型 B 时,所有这些视图模型 B 都将收到该事件。

    如果您想在不再处于活动状态的视图模型上接收事件(因此除非您使用 true 订阅,否则将被收集),您可能希望在其他地方订阅该事件以对其做出反应(在服务?)或根本不订阅(收集的视图模型不需要更新任何内容)。

    【讨论】:

    • 如何在 UWP 中实现可以随时从任何 VM 访问的服务?
    • 将其注册为具有统一性的单例(或您使用的任何容器),并将其作为依赖项注入您的视图模型中。
    猜你喜欢
    • 2023-02-02
    • 2021-01-13
    • 1970-01-01
    • 1970-01-01
    • 2016-03-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多