在将对象作为有效负载的视图模型之间使用Prism 6 Event Aggregator [英] Using Prism 6 Event Aggregator between view models with an object as the payload

查看:113
本文介绍了在将对象作为有效负载的视图模型之间使用Prism 6 Event Aggregator的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我希望你们中的一个能帮我一些语法.

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的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆