3

TreeView 컨트롤 예제 프로젝트 here을 Entity Framework 개체와 함께 사용하도록 수정했습니다. 그것은 아름답게 작동하지만 많은 사람들이 ParentViewModels 기반 컬렉션 또는 속성을 업데이트하려고 시도하는 것처럼 SelectedItem 변경 사항도 이해의 틈을 메울 수 없습니다.WPF TreeView의 SelectedItem 속성에 바인딩하는 방법?

저는 MVVM에서 일하고 있으며, 제 코드 숨김을 없애고 싶습니다. 초보자로서 나는 PropertyChanged 알림 구현의 청결을 좋아하지만 TreeView에 바인딩 할 고유 한 "SelectedItem"속성이 없으므로 평소대로 ListBox처럼 PropertyChanged 이벤트를 발생시킬 수 없습니다.

ChildViewModel에서 SelectedItem 속성 (실제로 isSelected = true 인 객체를 성공적으로 캡처 함)이 있습니다 (H.B.의 대답 this question 참조). 또한 내 View에 바인딩 된 ParentViewModel에 ChildViewModel 유형의 SelectedItem이 있습니다 (@Martin Liversage의 게시물 here 참조). 나는 그들을 동기화 할 수 없습니다.

내 ChildViewModel의 SelectedItem 속성을 ParentViewModel에 전달하는 방법을 이해하도록 도와주십시오. TreeView를 CollectionView에 바인드하지 않으므로 뷰 모음에 CurrentItem을 가져올 수 없습니다.

내가 다루고있는 내 viewmodel 컬렉션은 매우 쿼리가 많아서 지금은 코드를 포함하지 않았습니다. 명확성을 위해 무엇이 필요한지 알려주세요.

답변

6

그래서 적어도 일상적인 MVVM-WTF에 익숙해지기 시작했습니다. '왜 이렇게 기초적인 내용으로 게시해야합니까?' 어느 날 MVVM을 좋아할 것입니다.)

즉 : TreeView는 SelectedItem 속성 동기화를 지원하지 않습니다. 그것은 존재하지만, 그것은 읽기 전용입니다. 당신이하고 싶은 일은 TreeView의 동작을 확장하여 선택한 항목을 ViewModel의 속성과 동기화하는 것입니다.

이 문제 설명은 올바른 방향으로 당신을 가리 킵니다 : 행동. 동작 (정확하게는 System.Windows.Interactivity.Behavior <>)을 사용하면 DependencyObject의 기능을 확장 할 수 있습니다. (Good introduction)

행동을 통해 선택된 항목으로 트 리뷰를 동기화하는 접근 방법은 여기에서 찾을 수 있습니다 : 이것은 이미 당신을 위해 무엇을해야

SO Thread

. 스티브 그레이트 레 코드의 코드를 복사하여 붙여 넣기 만하면됩니다. 이 접근법에 대한 도움이 필요하면 의견을 말하십시오. 배우는 것을 즐긴다!

+0

감사합니다 :) 죄송하지만 오래 걸렸습니다. 이 질문과 제가 가진 추가 이해 문제 사이에 분별력이있었습니다. – Rachael

+0

문제 없습니다, 도움이되기를 바랍니다! – Marc