내 ShellViewModel에서 Linq 및 EntityFramework를 사용하여 쿼리하는 다음 함수가 있습니다. 여기서 목표는 POCO를 ViewModels로 변환하고 결과 ViewModel을 CM을 사용하여 ShellView의 ListBox에 바인딩하는 것입니다.ViewModels의 Caliburn.Micro EventAggregator가 CM에 의해 인스턴스화되지 않았습니다
다음은 코드의 일부 목록입니다. 모든 것이 잘 작동합니다. 그러나 이제는 특정 작업이 발생할 때 ShellViewModel에 알릴 수 있도록 각 ItemViewModel을 사용해야하는 시점에 있습니다. 어떻게 CM의 EventAggregator를 각 ItemViewModel에 넣을 수 있습니까? 모든 EventAggregator 예제는 ViewModel의 Ctor를 통한 종속성 주입을 통해 이러한 상황을 보여줍니다. 아래의 GetData()와 같이 ViewModel을 인스턴스화 할 때 종속성 주입을 사용하려면 어떻게해야합니까?
[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
흠, 그 오류 메시지를 재현 할 수없는 것 같습니다. 나는 당신 자신의 답변에 게시 된 것처럼 EventAggregator = this._event를 시도했지만 괜찮습니다. EventAggregator는 ItemViewModel의 IEventAggregator의 속성입니까? – Sven