问题描述
我希望你们中的一个能帮我一些语法.
Hi I'm hoping one of you could help me with some syntax.
因此,我正在关注以下示例 https://www.codeproject.com/Tips/591221/Simple-EventAggregator-in-WPF-PRISM 有关使用Prism Event Aggregator将消息从一个ViewModel发送到另一个ViewModel的信息.
So I'm following this example https://www.codeproject.com/Tips/591221/Simple-EventAggregator-in-WPF-PRISM on using Prism Event Aggregator to send messages from one ViewModel to another.
下面的代码在发布单个字符串作为有效负载时非常有用.
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; }
}
}
发布者(在ViewModel1中):
Publisher (In ViewModel1):
OrderSelectedEvent_SS.Instance.Publish(_strCurrentOrder);
订户(在ViewModel2中:
Subscriber (In 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; }
}
}
发布者(在ViewModel1中):
Publisher (In ViewModel1):
OrderSelectedEvent.OrderSelectedPayload ospl = new OrderSelectedEvent.OrderSelectedPayload();
ospl.SelectedOrder = _strCurrentOrder;
ospl.SelectedE32 = _strCurrentE32JobNumber;
OrderSelectedEvent.Instance.Publish(ospl);
订户(在ViewModel2中:
Subscriber (In 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.
推荐答案
您的问题很简单:您正在定义事件以将object
作为有效负载传递,然后尝试使用特定的类作为有效负载.要解决此问题,请更改
Your problem is simple: You are defining the event to pass an object
as payload, then trying to use a specific class as payload instead. To fix this, change
internal class OrderSelectedEvent : PubSubEvent<object>
收件人:
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)
收件人:
private void OrderSelectedEventHandler(object ospl)
这篇关于在将对象作为有效负载的视图模型之间使用Prism 6 Event Aggregator的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!