在尝试构建一个eventaggregator以便将object
的属性从MainViewModel
转换为SectionViewModel
时,我尝试关注多篇文章(1,2,3和4),以了解其工作原理,但是我似乎缺少了一步。 。?
在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/