2010-12-10 2 views
3

Caliburn.Micro를 사용하는 Windows WPF 앱이 있습니다. 주 창보기 /보기 모델은 Caliburn.Micro에서 처리합니다. 그것의 버튼 중 하나는 다른 view-viewmodel을 사용하는 새로운 대화 창을 띄웁니다.두 개의 Caliburn.Micro 뷰가 포함 된 대화 상자보기?

이 대화 상자에는 다른 대화 상자에 포함 할 수 있도록 재사용 가능한 컨트롤로 만들려는 컨테이너 (목록 상자 및 일부 필터 컨트롤)가 있습니다. 이를 위해 대화 상자의 뷰에서 추출한 다음 관련 코드를 뷰 모델로 만들고 새로운 뷰와 뷰 모델을 만들었습니다. 이것은 모두 좋아 보인다.

문제는 이제 대화 상자에 다시 사용할 재사용 가능한 컨트롤이 필요한 큰 빈 공간이있는 dockpanel이 있다는 것입니다.

대화 상자 viewmodel OnInitalize()에서 재사용 가능한 컨트롤 뷰 모델을 만들 수 있었지만 대화 상자보기의 dockpanel으로 뷰를 가져 오는 방법을 알지 못합니다.

주 창 viewmodel에서 대화 상자를 만들려면 WindowManager()를 사용하고 ShowDialog()를 사용하여 대화 상자의보기 모델을 표시하면 Caliburn.Micro가보기를 설정합니다. 대화 상자의 XAML에서 재사용 가능한 컨트롤에 대한보기를 포함시키고 Caliburn에 적절한 view/viewmodel을 만들도록 지정할 수있는 방법이 있습니까?

아니면 잘못된 길로 가고 있습니까?

답변

8

다른보기 모델 유형 인 대화 상자보기 모델에 속성이 있고이 속성과 동일한 이름의 대화 상자보기에 ContentControl을 추가하면 Caliburn.Micro는 자동으로 해당보기를 삽입합니다 속성보기 모델 유형에 ContentControl 자리 표시 자로 추가하고 해당보기 모델 유형을보기에 자동으로 바인딩 할 수도 있습니다. 너가 말하는게 이거니? 같은 뭔가 : 물론

// Dialog View Model 
private MyReusableControlViewModel myReuseableControl; 
public MyReusableControlViewModel MyReuseableControl 
{ 
    get { return this.myReuseableControl; } 
    set { this.myReuseableControl = value; NotifyOfPropertyChanged(...); } 
} 

// Dialog View Model Constructor 
public DialogViewModel() 
{ 
    this.MyReuseableControl = new MyReusableControlViewModel(); 
} 

// Dialog View 
<DockPanel> 
    ... 
    <ContentControl x:Name="MyReusableControl" /> 
</DockPanel> 

는, 이상적으로는 오히려 구체적인 유형보다는, 대화보기 모델 내에서 추상화에 대한 대화보기 (이 경우 MyReusableControlViewModel) 모델과 작업의 종속성을 주입 할 것입니다.

+0

이것은 내가 찾고있는 것처럼 들리지만, 시도해 보겠습니다. – DaveK

+0

완벽하게 작동합니다. 감사합니다! – DaveK

+0

이것을 알아 내려고 몇 시간을 보냈다가이 대답을 발견했습니다. 고맙습니다. 해결책은 생각보다 훨씬 간단했습니다. –

관련 문제