gpt4 book ai didi

c# - WPF TreeView HierarchicalDataTemplate 获取 TreeViewItem

转载 作者:行者123 更新时间:2023-11-30 18:08:25 27 4
gpt4 key购买 nike

我正在使用 HierarchicalDataTemplate 将我的类绑定(bind)到带有复选框的 TreeView。我的代码工作正常并且一切都显示正常,但我希望能够在我的 TreeView 中获得一个项目的子项列表。

单击复选框时,我希望能够选择父节点和子节点。如果我有权访问应该包装复选框的 TreeViewItem,那么我可以轻松地执行此操作,但是复选框的 Parent 属性为空...我似乎只能访问在 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 类中添加子节点和父节点。您需要在初始化时设置 Parent/Children。

<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}" />

在你的 View 模型中。

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/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com