在尝试构建一个eventaggregator以便将object的属性从MainViewModel转换为SectionViewModel时,我尝试关注多篇文章(1234),以了解其工作原理,但是我似乎缺少了一步。 。?

MainViewModel中,我有;

protected readonly IEventAggregator eventAggregator;
public MainViewModel(IMainViewModel mainViewModel, IEventAggregator eventAggregator)
{
    ...Some other Code...
    this.eventAggregator = eventAggegator;
}

public Object Object
{
    ...Getter...
    set
    {
        this.object = value;
        this.RaisePropertyChanged();
        this.EventAggregator.GetEvent<SetObjectEvent<Object>>().Publish(this.Object);
    }
}

SectionViewModel中,
protected readonly IEventAggregator eventAggregator;
public SectionViewModel(ISectionViewModel sectionViewModel, IEventAggregator eventAggregator)
{
    this.eventAggregator = eventAggregator;;
    this.eventAggregator.GetEvent<SetObjectEvent<Object>>().Subscribe((object) => { this.Object = object; });
}

谁都抛出参数exception The type or namespace name 'SetObjectEvent<>' could not be found。我以为是因为我需要一个全局EventAggregator,但有人指出情况并非如此。

这是大多数文章的主旨,(至少对我而言)看起来没有引起任何问题。对我来说,这一切似乎都很合乎逻辑,而且我知道应该怎么做。但是,似乎没有文章实际上是在定义'SetObjectEvent'Event吗?而是创建某种通用的EventAggregate就是这样。那就是我对正在发生的事情失去了解的地方。对我来说,听起来很合逻辑,我需要有一个类似“事件”的类,它可以容纳项目中所有不同的可调用事件,但是我不知道该如何完成?

编辑;由于this answer暗示我认为不对的不是问题,因此我重新表述了问题,以便更准确地描述问题。

编辑;根据要求SetObjectEvent类
public class SetObjectEvent<TRequest> : PubSubEvent<SetObjectEvent<TRequest>> where TRequest : IObject {}

源自this SO article

编辑;更改为
public class SetObjectEvent : PubSubEvent<Object> {}

正如在多条评论中所建议的那样,GetEvent<SetObjectEvent>()GetEvent<SetObjectEvent<Object>>()上的参数都相同

最佳答案

事实证明,问题出在,而(还有一点如何*)

我将SetObjectEvent放置在models指令中,因为我认为它是Event的模型。我以为using MyProject.MyModule.Models;命名空间中的MainViewModel会正确地引用它。原来,我在浏览有关EventAggragator的更多SO文章时错了。 SetObjectEvent应该以namespace MyProject.MyModule.SetObjectEvent的形式位于模块 namespace 中。

关于c# - 找不到GetEvent <SetObjectEvent>(缺少指令/引用?)-我在做什么错..?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/39446466/

10-10 23:54