WPF TreeView HierarchicalDataTemplate基于ItemsSource对象属性将child设置为active

时间:2015-03-07 06:53:56

标签: c# wpf treeview

我正在使用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。

我一直在寻找几个小时的答案而且我找不到任何可以帮助我实现这个目标的答案,但是如果这个问题已经在这里得到解答我肯定你们这些人会是能够指出我正确的方向。

2 个答案:

答案 0 :(得分:0)

只需将TreeViewItem上IsSelected属性的绑定设置为Channel对象的IsActive属性即可。 (确保dataContexts正确)

尝试使用此模板而不是现在的模板:

<HierarchicalDataTemplate DataType="{x:Type IRCLib:ServerConnection}"
                      ItemsSource="{Binding Path=ActiveChannels}">
        <CheckBox IsChecked="{Binding IsActive}" Content="{Binding Path=Config.ServerName}" Foreground="Black"/>
    </HierarchicalDataTemplate>

您将看到将根据IsActive属性

检查所有项目

答案 1 :(得分:0)

所以我尝试了更多的东西,最后找到了我想要的东西,这非常容易。

<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>

通过使用另一个针对从Channel对象创建的TreeViewItems的HierarchicalDataTemplate,我能够正确设置IsSelected属性。