2010-05-14 7 views
0

나는 계층 적 데이터 바인딩이있는 TreeView가 있습니다. 내 MVVM이 아닌 TreeViewItem.Header 컨트롤을 가져오고 싶습니다. TreeView.ItemContainerGenerator.ContainerFromIndex() 메서드를 사용하여 TreeViewItem 얻을 수 있지만 TreeViewItem.Header 가져 오는 방법?데이터 바인딩 된 TreeView에서 머리글 컨트롤을 얻는 방법

감사합니다, 마르신

답변

0

매우 간단합니다 : 일반적으로 코드 모델에 반대 헤더 컨트롤 자체에 대한 액세스 권한을 (필요

var item = TreeView.ItemContainerGenerator.ContainerFromIndex(...); 
var header = ((TreeViewItem)item).Header; 

그러나 좋은 생각되지 않을 수도 있습니다)는 잘못 작성되었으므로 대신 데이터 바인딩을 사용하도록 다시 작성해야합니다.

+0

감사합니다. 그러나 머리글에는 컨트롤이 아닌 내 모델이 있습니다. 컨트롤의 가치를 바꿔야하기 때문에 컨트롤이 필요합니다. 왜 내가 모델을 바꾸고 싶지 않아? 왜냐하면 모델 폭이 아닌 제어 폭이 필요한 기능이 필요하기 때문입니다. 이 기능은 TreeViewItem.Header 텍스트를 편집 할 때 TextBlock을 TextBox 컨트롤로 바꿔야합니다. – zielu1

+0

여러 가지 방법으로 데이터 바인딩을 사용하여 TextBlock을 TextBox로 교체 할 수 있습니다. 일반적으로 내보기 모델에는 "InPlaceEditing"과 같은 플래그가 있으며 템플릿의 데이터 트리거를 사용하여 TextBox의 TextBlock을 바꿉니다. 내가 사용한 적이있는 몇 가지 다른 솔루션은 다음과 같습니다. 1. 첨부 된 속성을 사용하여 템플릿을 자동으로 바꿔서 한 번에 전체 UI를 변경하는 데 좋았습니다. 2. 변환기의 바인딩을 사용하여 컨트롤의 템플릿을 설정합니다. WPF에는 데이터 바인딩을 통해이를 제어하는 ​​많은 강력한 메커니즘이 있으므로이를 사용하지 않는 것이 거의 범죄가됩니다. –

관련 문제