0
나는에 의해 정의 된 4 수준의 트리 구조가 있습니다HierarchicalDataTemplate 항목을 TreeViewItem 내부에 자동으로 래핑 할 수 있습니까?
<HierarchicalDataTemplate DataType="{x:Type src:Level1}" ItemsSource="{Binding Path=Level2Items}">
<TextBlock Text="{Binding Path=Level1Name}"/>
</HierarchicalDataTemplate>
<HierarchicalDataTemplate DataType="{x:Type src:Level2}" ItemsSource="{Binding Path=Level3Items}">
<TextBlock Text="{Binding Path=Level2Name}"/>
</HierarchicalDataTemplate>
<HierarchicalDataTemplate DataType="{x:Type src:Level3}" ItemsSource="{Binding Path=Level4Items}">
<TextBlock Text="{Binding Path=Level3Name}"/>
</HierarchicalDataTemplate>
<DataTemplate DataType="{x:Type src:Level4}">
<TextBlock Text="{Binding Path=Level4Name}"/>
</DataTemplate>
을 그리고 그것은 잘 작동합니다. 유일한 것은 TreeViewItem 유형이 아니기 때문에 프로그래밍 방식으로 내 바운드 항목을 선택할 수 없다는 것입니다 (따라서 "IsSelected"속성이 없음). 데이터 바인딩 된 항목을 특정 컨테이너 유형 (이 경우 : TreeViewItem)에 자동으로 래핑하는 방법이 있습니까?
불행하게도, 바인딩 항목은 TreeViewItem 안에 자동으로 포장됩니다 당신의 가정은 (내 경우에는 사실이 아니다 이유가 무엇이든지). TreeView의 Items 컬렉션의 첫 번째 항목에서 GetType()을 호출하면 "TreeViewItem"유형이 아닌 내 유형이 반환됩니다. 이견있는 사람? 감사!! – Pwninstein
Items 컬렉션에는 예상 한대로 항목이 포함되어 있습니다. 그러나 시각적 트리는 컨테이너에 항목을 래핑합니다. TreeViews의 경우 컨테이너는 TreeViewItem입니다. –
켄트는 정확합니다. 각 항목은 ItemContainer에 래핑되며 ItemContainerStyle 속성으로 설명됩니다. TreeView의 경우 기본 컨테이너는 TreeViewItem입니다. Dr. WPF의 ItemContainers 블로그 게시물을 확인하십시오. http://drwpf.com/blog/Home/tabid/36/EntryID/32/Default.aspx – Adrian