user83493
user83493

Reputation: 213

WPF: Binding to selected TreeViewItem

I have a TreeView that is built on an XML file and contains a text and an image in each TreeViewItem. Also, I have a TextBlock and an Image, that I want to bound to the selected TreeViewItem.

How can I do this?

Here is my XAML:

<Window.Resources>
<HierarchicalDataTemplate DataType="Node" ItemsSource ="{Binding XPath=ChildNode}">
    <StackPanel Orientation="Horizontal">
        <Image Source="{Binding XPath=@Image}"/>
        <TextBlock Text="{Binding XPath=@Name}" />
    </StackPanel>
</HierarchicalDataTemplate>
<HierarchicalDataTemplate DataType="ChildNode" ItemsSource ="{Binding XPath=GrandchildNode}">
    <StackPanel Orientation="Horizontal">
        <Image Source="{Binding XPath=@Image}" />
        <TextBlock Text="{Binding XPath=@Name}" />
    </StackPanel>
</HierarchicalDataTemplate>
<DataTemplate DataType="GrandchildNode">
    <StackPanel Orientation="Horizontal">
        <Image Source="{Binding XPath=@Image}" />
        <TextBlock Text="{Binding XPath=@Name}" />
    </StackPanel>
</DataTemplate>
<XmlDataProvider x:Key="xmlNodeList" Source="XMLFile1.xml" XPath="Root"/></Window.Resources><StackPanel>
<TreeView Name="treeView1" ItemsSource="{Binding Source={StaticResource xmlNodeList}, XPath=Node}" />
<TextBlock />
<Image /></StackPanel>

And here is an XML data:

<Root>
<Node Name="AAA" Image="images/1.ico" />
<Node Name="BBB" Image="images/2.ico">
    <ChildNode Name="bbb 1" Image="images/3.ico">
        <GrandchildNode Name="b 1.1" Image="images/4.ico"/>
        <GrandchildNode Name="b 1.2" Image="images/5.ico"/>
        <GrandchildNode Name="b 1.3" Image="images/6.ico"/>
    </ChildNode>
    <ChildNode Name="bbb 2" Image="images/7.ico"/>
    <ChildNode Name="bbb 3" Image="images/8.ico">
        <GrandchildNode Name="b 3.1" Image="images/9.ico"/>
        <GrandchildNode Name="b 3.2" Image="images/10.ico"/>
    </ChildNode>
    <ChildNode Name="bbb 4" Image="images/11.ico"/>
</Node>
<Node Name="CCC" Image="images/12.ico">
    <ChildNode Name="ccc 1" Image="images/13.ico">
        <GrandchildNode Name="c 1.1" Image="images/14.ico"/>
        <GrandchildNode Name="c 2.2" Image="images/15.ico"/>
    </ChildNode>
</Node></Root>

Upvotes: 2

Views: 7396

Answers (1)

Steven
Steven

Reputation: 3928

If you stick you TextBlock & Image inside another StackPanel to make it a bit easier you can do:

<StackPanel DataContext="{Binding ElementName=treeView1, Path=SelectedItem}">
   <TextBlock Text="{Binding XPath=@Name}" />
   <Image Source="{Binding XPath=@Image}" />
</StackPanel>

Upvotes: 6

Related Questions