Bind a TreeView to a data source and use DataTemplate objects to customize the TreeView.
<Window x:Class="TreeViewDataBinding.Window1"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="TreeViewDataBinding"
xmlns:EngNews="clr-namespace:TreeViewDataBinding">
<Window.Resources>
<ObjectDataProvider x:Key="EasternHemisphereDataSource" ObjectType="{x:Type EngNews:WebSiteGroupA}"/>
<ObjectDataProvider x:Key="WesternHemisphereDataSource" ObjectType="{x:Type EngNews:WebSiteGroupB}"/>
<DataTemplate x:Key="NewspaperTVItem">
<DockPanel>
<Image Source="c:\image.jpg"/>
<TextBlock VerticalAlignment="center" Text ="{Binding Path=Name}"/>
</DockPanel>
</DataTemplate>
<DataTemplate x:Key="WesternHemisphereHeaderTemplate">
<DockPanel>
<Ellipse Width="7" Height="7" Fill="Blue" DockPanel.Dock="Left"/>
<TextBlock Margin="2,0,0,0" VerticalAlignment="Center" DockPanel.Dock="Right">
test
</TextBlock>
</DockPanel>
</DataTemplate>
<DataTemplate x:Key="EasternHemisphereHeaderTemplate">
<DockPanel>
<Ellipse Width="7" Height="7" Fill="Blue" DockPanel.Dock="Left"/>
<TextBlock DockPanel.Dock="Right">Eastern Hemisphere</TextBlock>
</DockPanel>
</DataTemplate>
</Window.Resources>
<StackPanel>
<TreeView Name="WebSiteEntrys" SelectedItemChanged="SelectedNewspaperChanged">
<TreeViewItem HeaderTemplate="{StaticResource WesternHemisphereHeaderTemplate}"
ItemsSource="{Binding Source={StaticResource WesternHemisphereDataSource}}"
ItemTemplate="{StaticResource NewspaperTVItem}"/>
<TreeViewItem HeaderTemplate="{StaticResource EasternHemisphereHeaderTemplate}"
ItemsSource="{Binding Source={StaticResource EasternHemisphereDataSource}}"
ItemTemplate="{StaticResource NewspaperTVItem}"/>
</TreeView>
<Frame Name = "NewspaperFrame" Content="this is a test."/>
</StackPanel>
</Window>
//File:Window.xaml.vb
Imports System
Imports System.Windows
Imports System.Windows.Controls
Imports System.Windows.Data
Imports System.Windows.Documents
Imports System.Windows.Media
Imports System.Windows.Shapes
Imports System.Collections.ObjectModel
Namespace TreeViewDataBinding
Public Partial Class Window1
Inherits Window
Public Sub New()
InitializeComponent()
End Sub
Private Sub SelectedNewspaperChanged(sender As Object, e As RoutedPropertyChangedEventArgs(Of [Object]))
Dim engnews As WebSiteEntry = TryCast(WebSiteEntrys.SelectedItem, WebSiteEntry)
If engnews IsNot Nothing Then
NewspaperFrame.Navigate(New System.Uri(engnews.Website))
End If
End Sub
End Class
Public Class WebSiteEntry
Private _name As String
Private _website As String
Public Property Website() As String
Get
Return _website
End Get
Set
_website = value
End Set
End Property
Public Property Name() As String
Get
Return _name
End Get
Set
_name = value
End Set
End Property
Public Sub New(name__1 As String, website__2 As String)
Name = name__1
Website = website__2
End Sub
End Class
Public Class WebSiteGroupA
Inherits ObservableCollection(Of WebSiteEntry)
Public Sub New()
Add(New WebSiteEntry("A", "http://www.A.com"))
Add(New WebSiteEntry("B", "http://www.B.com"))
Add(New WebSiteEntry("C", "http://www.C.com"))
End Sub
End Class
Public Class WebSiteGroupB
Inherits ObservableCollection(Of WebSiteEntry)
Public Sub New()
Add(New WebSiteEntry("D", "http://www.D.com/"))
Add(New WebSiteEntry("E", "http://www.E.net/"))
Add(New WebSiteEntry("F", "http://www.F.com"))
End Sub
End Class
End Namespace
Related examples in the same category