在尝试构建eventaggregator以将object
的属性从MainViewModel
转移到SectionViewModel
时,我尝试过多篇文章(1,{{ 3}},2和3)关于它是如何工作的,但我似乎错过了一步......?
在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; });
}
两者都抛出了参数excpetion The type or namespace name 'SetObjectEvent<>' could not be found
。我认为这是因为我需要一个全局的EventAggregator,但有人指出情况并非如此。
这是大多数文章的重要内容,(至少对我而言)看起来并不会导致任何问题。这对我来说似乎很合乎逻辑,而且我理解它应该做什么。但是,这些文章似乎都没有真正定义'SetObjectEvent'Event
?而是创建某种通用EventAggregate
,就是这样。这就是我对正在发生的事情失去追踪的地方。对我来说这听起来很合乎逻辑我需要有一个像'Events'这样的类可以保存项目中所有不同的可调用事件,但是我不知道如何实现这个目的? < / p>
编辑;正如4暗示我认为错误不是问题,我更准确地重述了我的问题(?)描述我的问题。
编辑;按要求设置SetObjectEvent类
public class SetObjectEvent<TRequest> : PubSubEvent<SetObjectEvent<TRequest>> where TRequest : IObject {}
派生自this answer
编辑;将其改为
public class SetObjectEvent : PubSubEvent<Object> {}
多个评论中建议的在GetEvent<SetObjectEvent>()
和GetEvent<SetObjectEvent<Object>>()
上提供了相同的参数例外
答案 0 :(得分:1)
事实证明,问题是哪里(并且只是一点点*)
我将SetObjectEvent置于models指令中,因为我认为它是Event的模型。我假设它在using MyProject.MyModule.Models;
命名空间内被MainViewModel
正确引用。结果我在浏览更多有关EventAggragator的SO文章时错了。 SetObjectEvent
应该作为namespace MyProject.MyModule.SetObjectEvent
位于模块名称空间中。
*看起来它应该是公共类SetObjectEvent:PubSubEvent {} - dvorn
答案 1 :(得分:-1)
EventAggregator类为您完成所有这些。在内部,它有&#34;事件&#34;字典