Caliburn 발표자를 호스트하기 위해 Listbox (또는 기타 항목 구성)를 사용

StackOverflow https://stackoverflow.com/questions/1807630

문제

내가있는 경우 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 속성의 고정 바인딩 표현식

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top