是否可以在订阅者处理 PRISM CompositePresentationEvent 的发布者上调用回调操作?如果是,我该怎么做?
这是示例场景:
- 主页
- 左控制
- 右控制
LeftControl 发布一个事件,RightControl 订阅以对事件采取行动。完成右侧控件中的操作后,我想执行另一个函数来刷新左侧控件。
是否可以在订阅者处理 PRISM CompositePresentationEvent 的发布者上调用回调操作?如果是,我该怎么做?
这是示例场景:
LeftControl 发布一个事件,RightControl 订阅以对事件采取行动。完成右侧控件中的操作后,我想执行另一个函数来刷新左侧控件。
没有内置的可能性这样做。但是,您可以为您的有效负载创建一个类,其中包含一个委托。然后,您可以从订阅了 CompositePresentationEvent 的方法中执行委托。
public class Payload
{
// Whatever you need here
...
public delegate void CallbackHandler();
public CallbackHandler Callback { get; private set; }
public Payload(CallbackHandler callback)
{
Callback = callback;
}
}
在发布者中创建有效负载:
var p = new Payload(SomeVoidFunctionOnPublisher);
然后,在您处理订阅者中的事件后,引发回调:
public void HandleEvent(Payload p)
{
// Do something first
// Then callback
p.Callback();
}
评论:
CompositePresentationEvents 背后的主要思想是组件之间的解耦,这在某种程度上被回调所破坏,至少在概念上是这样。考虑重新设计您的底层架构,以避免完全需要回调。或者考虑一下,由“回调”订阅者引发的第二个事件是否合理。