找不到 GetEvent<SetObjectEvent>(缺少 directive/reference?)- 我做错了什么..?
GetEvent<SetObjectEvent> could not be found (missing directive/reference?) - what am I doing wrong ..?
在尝试构建事件聚合器以将我的 object
的属性从 MainViewModel
转移到 SectionViewModel
时,我尝试关注多篇文章 (1, 2, 3 and 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; });
}
谁都抛出参数异常The type or namespace name 'SetObjectEvent<>' could not be found
。我以为这是因为我需要一个全局 EventAggregator,但有人指出事实并非如此。
这是大多数文章的主旨,(至少对我而言)看起来没有引起任何问题。这对我来说似乎很合乎逻辑,我明白它应该做什么。但是,none的帖子好像真的是定义了'SetObjectEvent'Event
?相反,创建某种通用的 EventAggregate
就是这样。这就是我对正在发生的事情有点迷失的地方。对我来说,这听起来很合乎逻辑,我需要有一个 class 之类的东西,比如 'Events' ,它可以容纳项目中所有不同的可调用事件,但我不知道如何完成这个?
编辑;由于 暗示我认为错误的不是问题,我改写了我的问题以更准确地(?)描述我的问题。
编辑;根据要求,SetObjectEvent class
public class SetObjectEvent<TRequest> : PubSubEvent<SetObjectEvent<TRequest>> where TRequest : IObject {}
源自
编辑;将其更改为
public class SetObjectEvent : PubSubEvent<Object> {}
如多条评论中所建议,在 GetEvent<SetObjectEvent>()
和 GetEvent<SetObjectEvent<Object>>()
上都给出了相同的参数异常
EventAggregator class 为您完成这一切。在内部,它有 "events" 字典
事实证明,问题是哪里(还有一点点如何*)
我将 SetObjectEvent 放在模型指令中,因为我认为它是事件的模型。我假设它会在 MainViewModel
命名空间中用 using MyProject.MyModule.Models;
正确引用。事实证明我在浏览更多有关 EventAggragator 的 SO 文章时错了。 SetObjectEvent
应该作为 namespace MyProject.MyModule.SetObjectEvent
位于模块命名空间中。
*Seemingly it should be public class SetObjectEvent: PubSubEvent {} – dvorn
在尝试构建事件聚合器以将我的 object
的属性从 MainViewModel
转移到 SectionViewModel
时,我尝试关注多篇文章 (1, 2, 3 and 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; });
}
谁都抛出参数异常The type or namespace name 'SetObjectEvent<>' could not be found
。我以为这是因为我需要一个全局 EventAggregator,但有人指出事实并非如此。
这是大多数文章的主旨,(至少对我而言)看起来没有引起任何问题。这对我来说似乎很合乎逻辑,我明白它应该做什么。但是,none的帖子好像真的是定义了'SetObjectEvent'Event
?相反,创建某种通用的 EventAggregate
就是这样。这就是我对正在发生的事情有点迷失的地方。对我来说,这听起来很合乎逻辑,我需要有一个 class 之类的东西,比如 'Events' ,它可以容纳项目中所有不同的可调用事件,但我不知道如何完成这个?
编辑;由于
编辑;根据要求,SetObjectEvent class
public class SetObjectEvent<TRequest> : PubSubEvent<SetObjectEvent<TRequest>> where TRequest : IObject {}
源自
编辑;将其更改为
public class SetObjectEvent : PubSubEvent<Object> {}
如多条评论中所建议,在 GetEvent<SetObjectEvent>()
和 GetEvent<SetObjectEvent<Object>>()
EventAggregator class 为您完成这一切。在内部,它有 "events" 字典
事实证明,问题是哪里(还有一点点如何*)
我将 SetObjectEvent 放在模型指令中,因为我认为它是事件的模型。我假设它会在 MainViewModel
命名空间中用 using MyProject.MyModule.Models;
正确引用。事实证明我在浏览更多有关 EventAggragator 的 SO 文章时错了。 SetObjectEvent
应该作为 namespace MyProject.MyModule.SetObjectEvent
位于模块命名空间中。
*Seemingly it should be public class SetObjectEvent: PubSubEvent {} – dvorn