Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/wpf/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 在以对象为有效负载的视图模型之间使用Prism 6事件聚合器_C#_Wpf_Mvvm_Prism_Eventaggregator - Fatal编程技术网

C# 在以对象为有效负载的视图模型之间使用Prism 6事件聚合器

C# 在以对象为有效负载的视图模型之间使用Prism 6事件聚合器,c#,wpf,mvvm,prism,eventaggregator,C#,Wpf,Mvvm,Prism,Eventaggregator,嗨,我希望你们中的一位能帮我学一些语法 因此,我将遵循这个示例,使用Prism事件聚合器将消息从一个ViewModel发送到另一个ViewModel 以下代码在将单个字符串发布为有效负载时非常有效 internal class OrderSelectedEvent_SS : PubSubEvent<string> { private static readonly EventAggregator _eventAggregator; private static rea

嗨,我希望你们中的一位能帮我学一些语法

因此,我将遵循这个示例,使用Prism事件聚合器将消息从一个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; }
    }
}
订阅服务器(在ViewModel2中:

OrderSelectedEvent_SS.Instance.Subscribe(OrderSelectedEventHandler_SS);
private void OrderSelectedEventHandler_SS(string strSelectedOrder)
    {
        CurrentOrder = strSelectedOrder;
    }
OrderSelectedEvent.Instance.Subscribe(OrderSelectedEventHandler); 
我试图做的是修改以接受一个对象(一个具有多个字符串的类)作为有效负载。 以下是我目前掌握的情况:

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; }
    }
}
订阅服务器(在ViewModel2中:

OrderSelectedEvent_SS.Instance.Subscribe(OrderSelectedEventHandler_SS);
private void OrderSelectedEventHandler_SS(string strSelectedOrder)
    {
        CurrentOrder = strSelectedOrder;
    }
OrderSelectedEvent.Instance.Subscribe(OrderSelectedEventHandler); 
我在subscriber上遇到一个错误:*错误:无法从“方法组”转换为“操作”****并且我似乎无法确定我需要做什么

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

提前感谢您提供的任何指导。

您的问题很简单:您正在定义将
对象
传递为有效负载的事件,然后尝试使用特定类作为有效负载。若要解决此问题,请更改

internal class OrderSelectedEvent : PubSubEvent<object>
致:


您正在尝试使用哪个版本的Prism?最新版本是6.2。好吧,那篇文章提供了一个解决方案,它是垃圾。有了它,您将在
PubSubEvent
ctor中创建一个
事件聚合器,而不是从IOC容器中获取。您需要查看这里()要了解有关Prism事件聚合的更多信息,请取消对该代码项目示例的书签,忘记您曾经见过它。我正在使用最新的Prism 6.2。我将研究该解决方案。感谢您的回复。@R.Richards绝对正确!该解决方案完全是垃圾。这是我认为我见过的最糟糕的事件聚合器实现。比谢谢你的评论。我会找到一个更好的实现。谢谢你!这解决了我的具体问题。但是,我将从上面的评论中得到建议并找到一个更好的实现。我真的很感谢大家的评论。这可能是最好的。祝你好运!
internal class OrderSelectedEvent : PubSubEvent<OrderSelectedPayload>
private void OrderSelectedEventHandler(OrderSelectedEvent.OrderSelectedPayload ospl)
private void OrderSelectedEventHandler(object ospl)