在我的ShellViewModel中,我已经获得了使用Linq和EntityFramework进行查询的以下函数。此处的目标是将POCO转换为ViewModels,并使用CM将生成的ViewModels绑定到ShellView中的ListBox。ViewModels中的Caliburn.Micro EventAggregator未由CM实例化
下面是代码的部分列表。一切正常。不过,我现在正处于需要每个ItemViewModel能够在发生某些操作时通知ShellViewModel的点。我如何将CM的EventAggregator放入每个ItemViewModel?所有EventAggregator示例都通过ViewModel的Ctor通过依赖注入来显示这种情况。当如下面的GetData()所示实例化ViewModels时,如何让依赖注入工作?
[Export(typeof(ShellViewModel))]
public class ShellViewModel : Conductor<object>, IHandle<UserPasswordChanged>
{
private void GetData()
{
var query = _EfDataContext.Items
.Where(x => (x.CreatedDtm > DayBeginning && x.CreatedDtm <= NowDtm));
//Create a list of ItemViewModels for Caliburn.Micro to Bind
//How can EventAggregator be injected into ItemViewModel when
//creating ViewModels this way?
this.Items = new BindableCollection<ItemViewModel>(query
.Select(x => new ItemViewModel
{
Item = x
}));
}
[ImportingConstructor]
public ShellViewModel(IEventAggregator eventAggregator)
{
_eventAggregator = eventAggregator;
_eventAggregator.Subscribe(this);
IsDeveloperMode = false;
}
}
感谢您的建议斯文,当我试图与对象初始化语法,我得到以下错误:“无法创建类型的常量值“Caliburn.Micro.IEventAggregator '。在这种情况下,只支持原始类型或枚举类型。“ – Sean 2014-12-03 15:37:45
嗯,我似乎无法重现该错误消息。我尝试了EventAggregator = this._event,就像你在自己的答案中发布的那样,但是工作正常。 EventAggregator是ItemViewModel上的IEventAggregator的属性吗? – Sven 2014-12-03 16:49:12