簡體   English   中英

在將對象作為有效負載的視圖模型之間使用Prism 6 Event Aggregator

[英]Using Prism 6 Event Aggregator between view models with an object as the payload

嗨,我希望你們中的一個可以幫助我一些語法。

因此,我遵循此示例https://www.codeproject.com/Tips/591221/Simple-EventAggregator-in-WPF-PRISM中有關使用Prism Event Aggregator將消息從一個ViewModel發送到另一個ViewModel的示例。

當發布單個字符串作為有效負載時,以下代碼非常有用。

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中):

OrderSelectedEvent_SS.Instance.Publish(_strCurrentOrder);

訂閱者(在ViewModel2中:

OrderSelectedEvent_SS.Instance.Subscribe(OrderSelectedEventHandler_SS);
private void OrderSelectedEventHandler_SS(string strSelectedOrder)
    {
        CurrentOrder = strSelectedOrder;
    }

我正在嘗試做的是修改以接受對象(具有多個字符串的類)作為有效負載。 這是我到目前為止的內容:

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中):

OrderSelectedEvent.OrderSelectedPayload ospl = new OrderSelectedEvent.OrderSelectedPayload();
ospl.SelectedOrder = _strCurrentOrder;
ospl.SelectedE32 = _strCurrentE32JobNumber;
OrderSelectedEvent.Instance.Publish(ospl);

訂閱者(在ViewModel2中:

OrderSelectedEvent.Instance.Subscribe(OrderSelectedEventHandler); 

我在subsriber上遇到錯誤:**錯誤:無法從“方法組”轉換為“操作” ****,而且我似乎無法弄清楚我需要做什么。

private void OrderSelectedEventHandler(OrderSelectedEvent.OrderSelectedPayload ospl)
{
    CurrentOrder = ospl.SelectedOrder;
    CurrentE32JobNumber = ospl.SelectedE32;
}

在此先感謝您提供的任何指導。

您的問題很簡單:您正在定義事件以將object作為有效負載傳遞,然后嘗試使用特定的類作為有效負載。 要解決此問題,請更改

internal class OrderSelectedEvent : PubSubEvent<object>

至:

internal class OrderSelectedEvent : PubSubEvent<OrderSelectedPayload>

另外,您可以更改處理程序簽名以匹配事件的預期參數:

private void OrderSelectedEventHandler(OrderSelectedEvent.OrderSelectedPayload ospl)

至:

private void OrderSelectedEventHandler(object ospl)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM