[英]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.