【问题标题】:CallerMemberName Attribute not working with EventAggregatorCallerMemberName 属性不适用于 EventAggregator
【发布时间】:2013-12-03 09:19:28
【问题描述】:

我在 Prism 工作,CallerMember 属性不适用于我的代码。我有一个Close 方法,想知道Close 方法从哪里得到调用。通常使用CallerMember 属性标记的memberName 参数应该接收调用方法名称。但是订阅和取消订阅代码显示,这个 eventAggregator 有一些无效的参数。任何帮助将不胜感激。

private void Close(bool isOKCommand,[CallerMemberName] string memberName = "")
{
        this.eventAggregator.GetEvent<ShowWarningMessageEvent>().Unsubscribe(this.Close);
        if (isOKCommand)
        {
            //Doing some operations;
        }
}

【问题讨论】:

  • 是 Unsubscribe(this.Close) 不起作用或 memberName 变量始终为空,还是什么?
  • 你使用哪个 .net 框架
  • @devhedgehog 新添加的“memberName”参数不允许编译代码。它显示“无效参数”。我对订阅和使用 CallerMember 属性没有任何问题。
  • 这是 4.5 个人,否则他根本无法使用 CallerMemberName 并且您必须遇到方法重载问题,或者您必须以某种方式错误地调用 Close。看看我的回答。
  • 这不是与CallerMemberName 相关的问题,您的Unsubscribe eventtaggregator 方法使用错误,请参阅Prism 文档了解如何取消订阅...

标签: c# wpf prism eventaggregator


【解决方案1】:

您调用和使用EventAggregatorUnsubscribe 方法的方式可能存在问题,这是您收到Invalid Arguments 异常的原因

取消订阅 Prism 事件需要 订阅令牌 由订阅方法或您传递给的 回调委托 返回 订阅方法。更多信息请参考MSDN

SubscriptionToken subscriptionToken = this.eventAggregator.GetEvent<ShowWarningMessageEvent>().Subscribe(<YourSubscribeMethod>);
this.eventAggregator.GetEvent<ShowWarningMessageEvent>().Unsubscribe(subscriptionToken);

【讨论】:

  • 取消订阅 EventAggregator 不需要订阅令牌
猜你喜欢
  • 2016-05-31
  • 2010-10-25
  • 1970-01-01
  • 1970-01-01
  • 2017-10-30
  • 2021-06-11
  • 2014-10-06
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多