2017-02-25 59 views
0

嗨,我希望你們其中一位可以幫助我一些語法。在視圖模型與對象之間使用Prism 6事件聚合器作爲有效載荷

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

以下代碼在發佈單個字符串作爲有效內容時效果很好。

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; 
} 

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

+0

您試圖使用什麼版本的棱鏡?最新版本是6.2。 –

+1

好的,那篇文章提供的解決方案就是垃圾。這樣你就可以在'PubSubEvent'''中新建'EventAggregator',而不是從IOC容器中獲取。您需要查看(http://prismlibrary.readthedocs.io/en/latest/WPF/09-Communication/)以查看更多關於使用Prism進行事件聚合的信息。將代碼項目示例取消加入書籤,並且忘記了您曾經看過它。 –

+0

我正在使用最新的Prism 6.2。我會研究這個解決方案。謝謝回覆。 – slaws

回答

1

問題很簡單:您正在定義事件以將object作爲有效內容傳遞,然後嘗試將特定的類用作有效內容。爲了解決這個問題,改變

internal class OrderSelectedEvent : PubSubEvent<object> 

要:

internal class OrderSelectedEvent : PubSubEvent<OrderSelectedPayload> 

或者,你可以改變你的處理程序的簽名相匹配的事件的預期參數:

private void OrderSelectedEventHandler(OrderSelectedEvent.OrderSelectedPayload ospl) 

要:

private void OrderSelectedEventHandler(object ospl) 
+1

謝謝!這解決了我的具體問題。不過,我將從上述評論中獲得建議,並找到更好的實施方案。我非常感謝大家的評論。 – slaws

+0

這可能是最好的。祝你好運! –