Caliburn 발표자를 호스트하기 위해 Listbox (또는 기타 항목 구성)를 사용
-
05-07-2019 - |
문제
내가있는 경우 MultiPresenter
그리고 나는 a를 사용하고 있습니다 ListBox
표시합니다 Presenters
Caliburn이 항목에 대한보기를 발견하고 묶게하는 방법은 무엇입니까?
예를 들어, 다음과 같이 보이는 간단한보기가있는 경우 다음과 같습니다.
<UserControl x:Class="MyProject.Views.CarView"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
<Grid>
<ListBox ItemsSource="{Binding Parts}" />
</Grid>
</UserControl>
그것은 CarViewModel
:
public class CarViewModel : MultiPresenter
{
public BindableCollection<IPartViewModel> Parts { get; }
}
그리고 Parts
컬렉션에는 구현하는 다양한 객체가 포함되어 있습니다 IPresenter
그리고 해당 견해가 있습니다 WheelViewModel
그리고 WheelView
, 그리고 EngineViewModel
그리고 EngineView
.
Caliburn이보기 전략을 사용하여보기를 해결하기를 원합니다. 이게 가능해? 이 경우 발표자의 계층 구조를 올바르게 설정하려면 어떻게해야합니까?
해결책
이를 위해 발표자 계층을 변경할 필요가 없습니다. 나는 당신이 사용하는 것을 고려하는 것만 제안합니다 MultiPresenter.Presenters
자식 뷰 모델 및 the를 수집하는 속성 MultiPresenter.Open
그리고 MultiPresenter.Shutdown
방법 어린이 뷰 모델 수명주기를 시행 해야하는 경우.
바인딩 문제의 경우 ListBox 항목의 템플릿을 정의해야합니다.
<ListBox ItemsSource="{Binding Parts}">
<ListBox.ItemTemplate>
<DataTemplate>
<ContentControl cal:View.Model="{Binding}" />
</DataTemplate>
</ListBox.ItemTemplate>
</ListBox>
사용 cal:View.Model
첨부 된 속성 인 프레임 워크는 각 뷰 모델에 대해 적절한보기를 작성하여 뷰 모델에 바인딩하고이를 컨텐츠 구성에 주입합니다.
또한 뷰 및 뷰 모델에 대한 네임 스페이스 및 클래스 이름 지정이 Caliburn을 따라야합니다. 기본 협약 프레임 워크에 의해 귀하의 견해가 올바르게 추론되기를 원한다면. 그렇지 않으면 사용자 정의 iviewstrategy를 작성해야합니다 (어렵지는 않습니다).
편집 : Cal : View.Model 속성의 고정 바인딩 표현식