2013-05-05 2 views
1

VLC의 고급 설정 메뉴와 비슷한 설정 메뉴를 만들고 싶습니다 : 왼쪽 트리보기와 오른쪽 컨트롤 컬렉션 모음. 오른쪽의 컨트롤을 사용하면 트리보기에서 현재 선택 항목과 관련된 설정을 조작 할 수 있습니다. 트리 뷰의 그리드 오른쪽을 만드는 것에 대해 생각했습니다. 그런 다음 선택에 따라 그리드에 표시해야하는 각보기에 대한 사용자 정의 컨트롤이 있습니다.그리드를 사용자 정의 컨트롤에 바인딩하는 방법

트리 뷰의 항목에는 관련보기에 대한 참조를 보유하는 UserControl 속성이 있습니다. 내 viewmodel에는 트리 뷰에서 현재 선택된 항목을 나타내는 SelectedItem 속성이 있습니다.

이제 UserControl 속성에 대한 그리드의 내용을 내 SelectedItem으로 바인딩하고 싶습니다. 그러나 나는 그것을하는 방법을 이해할 수 없다. 그리드의 Children 속성을 지우고 SelectedItem 속성이 변경 될 때마다 코드에 표시 할 사용자 정의 컨트롤을 추가하는 대신 XAML 기반 솔루션을 사용하는 것이 좋습니다.

답변

2

Grid 대신 ContentControl을 사용하는 것이 좋습니다.

트리보기와 콘텐츠 컨트롤이 동일한보기 모델에 있다고 가정합니다.보기 모델에서 트리보기의 항목과 동일한 유형의 선택된 항목 (예 : VMSelectedItem)의 속성을 추가합니다. 트리보기의 XAML에서

Content="{Binding VMSelectedItem.UserControl}" 

지금 트리에서 선택 차례로, 컨텐츠를 업데이트 할 것이라고 VMSelectedItem 속성을 업데이트 할 콘텐츠 컨트롤의 XAML에서

SelectedItem="{Binding VMSelectedItem}" 

를 추가

콘텐츠 컨트롤의

+0

정확히 내가 무엇을 찾고 있었습니까! 감사합니다. – Jan

0

resouces dictionay에서 선언 한 DataTemplates를 사용하는 것이 좋습니다. 당신은 좋은 메모리 발자국을 남기는 각 DataTemplate 인스턴스를 하나만 사용하게 될 것입니다. mvvm의 기본 아이디어 인 viewmodel 내부에 뷰의 인스턴스를 저장할 필요가 없습니다. 뷰 모델은 데이터 및 데이터를 표시하는 방법에 대한 정보 만 완벽하게 보유합니다.

예를 들어 값이 person, car, tree 인 뷰 모델 내부에 enum이 있습니다. DataTemplateSelector 안에는 원하는 DataTemplate을 리턴하는 enum이있을 것입니다.

기본적으로 각 TreeViewItem 당 모든 것을 가지지 않고 모든 것이 중앙에 있습니다.

관련 문제