2011-02-27 1 views
4

CM을 잘 사용할 수는 있더라도 초보자라고 생각합니다. 나는 코드 플렉스에서 롭 아이젠 버그 (Rob Eisenberg)의 스크린과 지휘자 등에 대해 nice introduction을 읽었다. 제가 정확히 이해한다면 지휘자는 그 자체가 스크린이고 스크린을 보여줄 것입니다. 나는 두 개의 서로 다른 화면, 아니면 도체를로드 할 수있는 방법,Caliburn.Micro : XAML의 "대상"이 다르고 거기에 뷰/뷰 모델을 얻는 방법

<Grid> 
    <Left x:Name="Menu" /> 
    <Right x:Name="Content/ActiveItem" /> 
</Grid> 

이제

XAML :

그러나 나는이 같은 (아주 의사 코드)를 달성 시작하는 방법을 볼 수 없습니다 그 두 위치에 표시 되나요?

"HelloScreens"샘플에서 이해하려고했지만 슬프게도 너무 많은 의존성이있어 실행 방법을 모르겠습니다. 나는 ShellView 두 개의 targettable 영역을 가지고있는 것으로 나타났습니다, 하나는 일반적인 "ActiveItem"다른 하나는 "Dialogs"이라고하지만 "Dialogs"의 문자열 검색은 아무 것도 알려지지 않습니다. 이 시점에서 너무 많은 마법이 진행되고 있습니다.

내 질문에. 마지막으로 Views가 XAML에서 끝나고 Caliburn.micro에서 위에 표시된 것과 같은 것을 달성하는 방법을 파악하는 데 가장 좋은 전략은 무엇입니까?

건배

답변

4

Caliburn는 상자 밖으로 도체의 여러 종류와 함께 제공됩니다. 지휘자 한 명 (액티비티 아이템 제외), 항목 수거 및 ActiveItem을 갖춘 지휘자 2 명.

물론 당신도 자신의 지휘자를 구현할 수는 있지만 여기서는 필요하지 않습니다. ShellViewModel이 지휘자가되기를 원하는 것처럼 들리 겠지만, 지휘하는 항목 모음이있는 것이 가장 적합하기 때문에 ShellViewModelConductor<IScreen>.Collection.OneActive에서 파생시킬 수 있습니다.

메뉴를 수행 할 필요가 없으므로 ShellViewModel에있는 Items 컬렉션에 대한 참조가 필요할 수 있습니다. ShellViewModel 생성자에서 메뉴에 표시 할 각 뷰 모델을 인스턴스화 할 수 있습니다 (추상 팩터 리를 사용하는 것이 가장 좋음). MenuViewModel에 Items 참조를 전달합니다. 그들은 보통 화면의 라이프 사이클 (OnActivate, OnDeactivate 등)이 있도록 ShellViewModel 행위는, Screen에서 파생 할 수

각 항목. 귀하의 MenuViewModel은 실시 중이 아니며 화면 수명주기가 필요하지 않으므로 PropertyChangedBase에서 파생 될 수 있습니다.

Caliburn.Micro를 사용하면 값이 뷰 모델 인 속성의 이름과 동일한 이름으로보기에 ContentControl이있을 때마다 Caliburn.Micro는 해당보기 모델보기를 찾아서 삽입합니다. ContentControl에 추가하고 바인딩도 처리합니다.

그래서 당신의 ShellViewModel 유형 MenuViewModelMainMenu 속성을 가질 수와 쉘보기처럼 보일 것입니다 : 좋은 소리

<Grid> 
    <Grid.ColumnDefinitions> 
    <ColumnDefinition Width="200" /> 
    <ColumnDefinition Width="*" /> 
    </Grid.ColumnDefinitions> 
</Grid> 

<ContentControl x:Name="MainMenu" Grid.Column="0" /> 
<ContentControl x:Name="ActiveItem" Grid.Column="1" /> 
+0

! 이것을 연습하기에는 너무 지쳤으나, 내일은 잘하면! – flq

+0

VIEWODODEL로 속성을 갖는 제안 된 방법을 따르는 경우 viemodel은 부모가 없기 때문에 nullo가됩니다. 이것에 대한 해결책이 있습니까? – GorillaApe

+0

새로운 질문을 시도해 보셨습니까? – devdigital

관련 문제