두 개의 사용자 정의 컨트롤이 있습니다. 하나는 TreeView
이고 하나는 ListView
입니다.UserControl은 TreeView (WPF) SelectedItem에 따라 달라집니다.
TreeView
에는 노드 및 리프 (node = TvShow, leaf = Season)를 채우는 itemsource 및 계층 적 데이터 템플릿이 있습니다.
ListView
에는 선택한 TreeView 항목의 하위 항목 (즉, 선택한 계절) (해당 계절의 에피소드)이 표시되어야합니다. 두 컨트롤이 별도의 사용자 정의 할 때 나는 이것을 달성 할 수있는 방법
<ListView
x:Name="_listViewEpisodes"
Grid.Column="2"
ItemsSource="{Binding ElementName=_tvShowsTreeView, Path=SelectedItem.Episodes}">
: 나는 트 리뷰와 같은 창에 정의 된 목록보기 모두, 나는 이런 식으로 뭔가를 사용할 수 있었을 때
이
괜찮 았는데 통제 수단? (하나의 사용자 정의 컨트롤의 컨텍스트에서 다른 사용자 컨트롤의 컨텍스트를 놓치기 때문에)이것은 매우 기본적인 것 같아서 혼란스러워 할 수 없다는 좌절감을 갖습니다. 코드 숨김으로이 문제를 해결하기를 거부합니다. 지금까지는 매우 깨끗한 MVVM 프로젝트가 있었으며 계속 그렇게하고 싶습니다.
누군가가 나에게 조언을 줄 수 있기를 바랍니다.
MVVM 태그를 지정 했으므로 둘 모두를 VM의 SelectedEpisodes 속성에 바인딩하십시오. –
오른쪽 방향은 컨트롤 (treeview 및 listview)을 동일한 viewmodel에 바인딩합니다. 그러나 나는'TreeView'의'SelectedItem'을 viewmodel에 묶을 수있는 방법이 궁금합니다. TreeView의'SelectedItem'은 *** readonly ***입니다. ViewModel을'DependencyObject'로 구현하지 않는 한'SelectedItem' 바인드 가능 속성을 지원하지 않는 한. 그러나 그런 식으로 우리는 여전히 몇 가지 코드가 필요합니다. 코드 숨김을 사용할 때'TreeView'의'SelectedItemChanged' 이벤트를 처리하고 이에 따라 뷰 모델의'SelectedItem'을 업데이트 할 수 있습니다. –
@KingKing이 경우 가장 좋은 솔루션은 두 개의 연결된 속성이 서로 바인딩 된 래퍼 개체를 만드는 것입니다. 따라서 첫 번째 소품을 SelectedItem에 바인딩하고 두 번째 소품을 Viewmodel에 바인딩합니다 – Alexis