wpf 在具有对象作为有效负载的视图模型之间使用 Prism 6 事件聚合器
声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow
原文地址: http://stackoverflow.com/questions/42451146/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me):
StackOverFlow
Using Prism 6 Event Aggregator between view models with an object as the payload
提问by slaws
Hi I'm hoping one of you could help me with some syntax.
嗨,我希望你们中的一个人可以帮助我了解一些语法。
So I'm following this example https://www.codeproject.com/Tips/591221/Simple-EventAggregator-in-WPF-PRISMon using Prism Event Aggregator to send messages from one ViewModel to another.
所以我正在关注这个例子https://www.codeproject.com/Tips/591221/Simple-EventAggregator-in-WPF-PRISM关于使用 Prism Event Aggregator 将消息从一个 ViewModel 发送到另一个。
The following code works great when publishing a single string as the payload.
以下代码在将单个字符串作为有效负载发布时效果很好。
internal class OrderSelectedEvent_SS : PubSubEvent<string>
{
private static readonly EventAggregator _eventAggregator;
private static readonly OrderSelectedEvent_SS _event;
static OrderSelectedEvent_SS()
{
_eventAggregator = new EventAggregator();
_event = _eventAggregator.GetEvent<OrderSelectedEvent_SS>();
}
public static OrderSelectedEvent_SS Instance
{
get { return _event; }
}
}
Publisher (In ViewModel1):
发布者(在 ViewModel1 中):
OrderSelectedEvent_SS.Instance.Publish(_strCurrentOrder);
Subscriber (In ViewModel2:
订阅者(在 ViewModel2 中:
OrderSelectedEvent_SS.Instance.Subscribe(OrderSelectedEventHandler_SS);
private void OrderSelectedEventHandler_SS(string strSelectedOrder)
{
CurrentOrder = strSelectedOrder;
}
What I'm trying to do is modify to accept an object (a class with multiple strings) as the payload. Here's what I have so far:
我想要做的是修改以接受一个对象(具有多个字符串的类)作为有效负载。这是我到目前为止所拥有的:
internal class OrderSelectedEvent : PubSubEvent<object>
{
private static readonly EventAggregator _eventAggregator;
private static readonly OrderSelectedEvent _event;
static OrderSelectedEvent()
{
_eventAggregator = new EventAggregator();
_event = _eventAggregator.GetEvent<OrderSelectedEvent>();
}
public static OrderSelectedEvent Instance
{
get { return _event; }
}
public class OrderSelectedPayload
{
public string SelectedOrder { get; set; }
public string SelectedE32 { get; set; }
}
}
Publisher (In ViewModel1):
发布者(在 ViewModel1 中):
OrderSelectedEvent.OrderSelectedPayload ospl = new OrderSelectedEvent.OrderSelectedPayload();
ospl.SelectedOrder = _strCurrentOrder;
ospl.SelectedE32 = _strCurrentE32JobNumber;
OrderSelectedEvent.Instance.Publish(ospl);
Subscriber (In ViewModel2:
订阅者(在 ViewModel2 中:
OrderSelectedEvent.Instance.Subscribe(OrderSelectedEventHandler);
I'm getting an error here on the subsriber: **ERROR: cannot convert from 'method group' to 'Action'**** and I can't seem to figure out what I need to do.
我在订阅者上遇到错误:**错误:无法从“方法组”转换为“操作”****,我似乎无法弄清楚我需要做什么。
private void OrderSelectedEventHandler(OrderSelectedEvent.OrderSelectedPayload ospl)
{
CurrentOrder = ospl.SelectedOrder;
CurrentE32JobNumber = ospl.SelectedE32;
}
Thanks in advance for any guidance you can provide.
预先感谢您提供的任何指导。
回答by Brandon Kramer
Your problem is simple: You are defining the event to pass an objectas payload, then trying to use a specific class as payload instead. To fix this, change
您的问题很简单:您正在定义事件以object作为有效负载传递,然后尝试使用特定类作为有效负载。要解决此问题,请更改
internal class OrderSelectedEvent : PubSubEvent<object>
To:
到:
internal class OrderSelectedEvent : PubSubEvent<OrderSelectedPayload>
Alternatively, you could change your handler signature to match the expected parameters of the event:
或者,您可以更改处理程序签名以匹配事件的预期参数:
private void OrderSelectedEventHandler(OrderSelectedEvent.OrderSelectedPayload ospl)
To:
到:
private void OrderSelectedEventHandler(object ospl)

