+3  A: 

Have you considered displaying a ContentControl as the right-side pane, and using DataTemplates to customize the contents? Then you could simply bind the right pane to the selected item of the TreeView.

For example:

<ContentControl Content="{Binding SelectedItem,ElementName=treeView1}">
    <ContentControl.Resources>
        <DataTemplate DataType="{x:Type my:A}">
            <StackPanel>
                <TextBlock Text="Displaying an A!" />
                <TextBlock Text="{Binding Foo}" />
            </StackPanel>
        </DataTemplate>

        <DataTemplate DataType="{x:Type my:B}">
            <StackPanel>
                <TextBlock Text="Displaying a B!" />
                <TextBlock Text="{Binding Bar}" />
            </StackPanel>
        </DataTemplate>
    </ContentControl.Resources>
</ContentControl>
Matt Hamilton
Yes, this is exactly what I was referring to in my comment to Josh.
Pierreten
+3  A: 

You can use the ContentPresenter class with a DataTemplateSelector. Bind the Content property to the TreeView.SelectedItem property then use the DataTemplateSelector to conditionally choose the template.

Josh Einstein
Good approach. He could also define a datatemplate associated with each of the types of nodes (assuming the A nodes are different clr types from the B nodes)
Pierreten
Yes, that's a good option if its strictly based on type and you don't have complex inheritance hierarchies. DataTemplateSelector does give you an extra degree of control if you need it.
Josh Einstein