WPF 树视图分层数据模板根据 ItemsSource 对象属性将子项设置为活动
本文关键字:属性 对象 活动 设置 ItemsSource 分层 视图 数据 WPF | 更新日期: 2024-10-30 15:03:59
我正在开发一个 C# WPF 中的 IRC 客户端,该客户端具有 TreeView,可以以下格式显示客户端当前连接到的服务器和通道:
- 服务器
- 渠道
这是我当前的代码:
<HierarchicalDataTemplate DataType="{x:Type IRCLib:ServerConnection}"
ItemsSource="{Binding Path=ActiveChannels}">
<TreeViewItem Header="{Binding Path=Config.ServerName}" Foreground="Black"/>
</HierarchicalDataTemplate>
我现在要做的是从 ActiveChannels 加载的 Channel 对象将其 IsActive 属性设置为 true,则将该对象的 TreeViewItem IsSelected 属性设置为 true。
我已经在寻找几个小时的答案了,但我找不到任何可以帮助我实现这一目标的东西,但如果这个问题已经在这里得到解答,我相信你们能够为我指出正确的方向。
只需将 TreeViewItem 中的 IsSelected 属性绑定设置为通道对象的 IsActive 属性即可。(确保数据上下文正确)
尝试使用此模板,而不是您现在拥有的模板:
<HierarchicalDataTemplate DataType="{x:Type IRCLib:ServerConnection}"
ItemsSource="{Binding Path=ActiveChannels}">
<CheckBox IsChecked="{Binding IsActive}" Content="{Binding Path=Config.ServerName}" Foreground="Black"/>
</HierarchicalDataTemplate>
您将看到将根据 IsActive 属性检查所有项目
所以我尝试了更多的东西,终于找到了我想要的东西,这出奇地容易。
<TreeView.Resources>
<HierarchicalDataTemplate DataType="{x:Type IRCLib:ServerConnection}"
ItemsSource="{Binding Path=ActiveChannels}">
<TreeViewItem Header="{Binding Path=Config.ServerName}"
Foreground="Black"
IsExpanded="True"/>
</HierarchicalDataTemplate>
<HierarchicalDataTemplate DataType="{x:Type IRCLib:Channel}">
<TreeViewItem Header="{Binding Path=Name}"
IsSelected="{Binding Path=IsActive}"/>
</HierarchicalDataTemplate>
</TreeView.Resources>
通过使用另一个面向从通道对象创建的 TreeViewItems 的 HierarchicalDataTemplate,我能够正确设置 IsSelected 属性。