WPF TreeView HierarchicalDataTemplate 根据 ItemsSource 对象将子项设置为活动 属性
WPF TreeView HierarchicalDataTemplate set child to active based on ItemsSource object property
我正在使用 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 属性 绑定设置为 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 属性
检查所有项目
所以我尝试了更多的东西,终于找到了我要找的东西,这出奇地简单。
<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 属性。
我正在使用 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 属性 绑定设置为 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 属性
检查所有项目所以我尝试了更多的东西,终于找到了我要找的东西,这出奇地简单。
<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 属性。