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。

我已经在寻找几个小时的答案了,但我找不到任何可以帮助我实现这一目标的东西,但如果这个问题已经在这里得到解答,我相信你们能够为我指出正确的方向。

WPF 树视图分层数据模板根据 ItemsSource 对象属性将子项设置为活动

只需将 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 属性。

相关文章: