2011-10-14 3 views
1

사용자가 드롭 다운 목록에서 항목을 선택할 수있는보기 모델 (MEF 사용)로 제어되는보기가 있습니다. 사용자가 선택한 각 항목은 영역으로 정의 된 탭 컨트롤을 채 웁니다. 뷰 모델, 뷰를 인스턴스화 그것을보기 모델을 지정하고이 지역에 추가 :이 모두 UI 관점에서 잘 작동보기를 추가해도 MEF 가져 오기 문이 호출되지 않습니다.

ProjectDetailView view = new ProjectDetailView(); 
ProjectDetailViewModel viewModel = new ProjectDetailViewModel(); 
viewModel.CurrentProject = project; 
view.DataContext = viewModel; 
RegionManager.Regions["SelectedItemsRegion"].Add(view); 

합니다. 그러나 프로젝트 세부 뷰 모델에는 이벤트를 게시하기위한 EventAggregator를 수신하기 위해 [Import] 문이 있습니다.

[Import] 
public IEventAggregator EventAggregator { get; set; } 

난 단지 지역에 뷰를 추가하고 요청이 특정 URI를 탐색하고 있지 않다 때문에, 상기 조성물이 발생하지 않는다 (또는 적어도가 표시되지 않습니다) EventAggregator 그래서 항상 null입니다. 이 동적으로 추가 된 뷰를 요청 된 클래스를 가져 오는 프로세스로 이동하려면 어떻게해야합니까? 특정보기에서 호출 할 수있는 작성 방법이있어 문제가 해결됩니까?

+0

최근에 동일한 문제가 발생했습니다. RegisterViewWithRegion에서 .Add로 코드를 변경했지만 [가져 오기]가 만족스럽지 않다는 것을 알았습니다. 또한 결코 호출되지 않는 IPartImportsSatisfiedNotification 인터페이스를 구현하려고했습니다. 누구나 이것에 대한 업데이트가 있습니까? –

답변

0

난 당신과 같이, EventAggregator를 인스턴스화하기 위해 팩토리 클래스를 만드는 것이 제안 :

분명히
public EventAggregatorFactory 
{ 
    [Export(typeof(IEventAggregator))] 
    public IEventAggregator Instance 
    { 
     get 
     { 
      return new EventAggregator(); 
     } 
    } 
} 

, 팩토리 클래스에 Export 선언을 이동합니다. 이렇게하면 viewmodel이 호출 될 때 EventAggregator의 Import이 올바르게 인스턴스화됩니다.

관련 문제