![](/img/trans.png)
[英]WPF TreeView HierarchicalDataTemplate - binding to object with multiple child collections
[英]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>
通過使用另一個HierarchicalDataTemplate來定位從Channel對象創建的TreeViewItems,我能夠正確設置IsSelected屬性。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.