我正在使用HierarchicalDataTemplate将我的类与复选框绑定到TreeView。我的代码可以正常工作,并且一切都可以正常显示,但是我希望能够在我的树形视图中获得该项目的子项列表。
单击复选框后,我希望能够选择父节点和子节点。如果我可以访问应该包装该复选框的TreeViewItem,则可以轻松地做到这一点,但是Checkbox的Parent属性为null ...我似乎只能获得对在HierarchicalDataTemplate中映射的类的访问权限。
<TreeView Margin="12" Name="trv1" SelectedItemChanged="trv1_SelectedItemChanged">
<TreeView.Resources>
<HierarchicalDataTemplate DataType="{x:Type src:Location}" ItemsSource="{Binding Path=Sublocations}">
<CheckBox Content="{Binding Name}" Tag="{Binding}" IsChecked="{Binding IsChecked}" Click="checkBox_Click"/>
</HierarchicalDataTemplate>
<HierarchicalDataTemplate DataType="{x:Type src:Sublocation}" ItemsSource="{Binding Path=Children}">
<CheckBox Content="{Binding Name}" Tag="{Binding}" IsChecked="{Binding IsChecked}" Click="checkBox_Click"/>
</HierarchicalDataTemplate>
<DataTemplate DataType="{x:Type src:Child}">
<CheckBox Content="{Binding Name}" Tag="{Binding}" IsChecked="{Binding IsChecked}" Click="checkBox_Click"/>
</DataTemplate>
</TreeView.Resources>
<TreeView.ItemContainerStyle>
<Style TargetType="TreeViewItem">
<Setter Property="IsSelected" Value="{Binding IsChecked}"/>
</Style>
</TreeView.ItemContainerStyle>
</TreeView>
最佳答案
您需要在TreeViewItem类中添加Children和Parent节点。您需要在初始化时设置“父/子”。
<HierarchicalDataTemplate x:Key="TreeViewItem" ItemsSource="{Binding Children}">
<CheckBox Margin="2" IsChecked="{Binding IsChecked, Mode=TwoWay}" Content="{Binding Name}" />
</HierarchicalDataTemplate>
<TreeView ItemsSource="{Binding Countries}" ItemTemplate="{StaticResource TreeViewItem}" />
在您的viewModels中。
public class MainPageViewModel
{
public ObservableCollection<Country> Countries {get;set;}
}
public class Country
{
public string Name {get; set;}
public bool IsChecked {get;set;}
public IEnumerable<State> Children {get; set;}
// Do not need parent for this.
}
public class State
{
public string Name {get; set;}
public bool IsChecked {get; set;}
public Country Parent {get; set;}
public IEnumerable<City> Children {get; set;}
}
public class City
{
public string Name {get; set;}
public bool IsChecked {get; set;}
public State Parent {get; set;}
}
关于c# - WPF TreeView HierarchicalDataTemplate获取TreeViewItem,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/3174122/