I've been frustrated with the Microsoft listbox in the toolkit and its ability to bind selections. Telerik is a step ahead of the game. They have come out with a RadTreeView that allows you to do binding to selections without bugs.

You can create HierarchalTemplates for your RadTreeView that bind to selections through a dependency property called ContainerBindings. The ContainerBindings is of type ContainerBindingCollection as shown below. You can put your binding for your ViewModel inside this collection.

<telerikControls:ContainerBindingCollection x:Name="SelectedItemBinding">

<telerikControls:ContainerBinding PropertyName="IsSelected" Binding="{Binding IsSelected, Mode=TwoWay}" />

</telerikControls:ContainerBindingCollection>



Now your HierarchalDataTemplate looks like this:

<telerikControls:HierarchicalDataTemplate x:Key="MyItemsTemplate"

telerikControls:ContainerBinding.ContainerBindings="{StaticResource SelectedItemBinding}">

<Border Opacity="{Binding Opacity}" >

<Grid>

<TextBlock Margin="10,0,5,0" Text="{Binding Name}" />

</Grid>

</Border>

</telerikControls:HierarchicalDataTemplate>


And your RadTreeView looks like this, referring to the items template described above:


<telerikNavigation:RadTreeView x:Name="myTreeView" Grid.Row="1" dragDrop:RadDragAndDropManager.AllowDrag="True"

Background="Black"

ItemTemplate="{StaticResource MyItemsTemplate}"

ItemsSource="{Binding MyItemsInTheViewModel}"

SelectionMode="Extended"

ScrollViewer.HorizontalScrollBarVisibility="Hidden"

ScrollViewer.VerticalScrollBarVisibility="Hidden"

ItemContainerStyle="{StaticResource MyRadTreeViewItemStyle}"

/>


Inside your ViewModel for your item (the data context of the item in your view, and not the data context for your treeview collection), you would have the property:


private bool isSelected;
public bool IsSelected
{
get { return isSelected; }
set
{
isSelected = value;
RaisPropertyChanged(this, "IsSelected");
}
}