As Gerry mentioned, you need to hook up a handler for the mouse click and check the status of the CTRL key. You then go through all your child ViewModels and flip the property you databound to the IsExpanded property. This is how you can databind the IsExpanded property (and take IsSelected along for the ride if you need it - makes it VERY easy to select an item programmatically):
<Setter Property="IsExpanded" Value="{Binding Path=IsExpanded, Mode=TwoWay}"/>
<Setter Property="IsSelected" Value="{Binding Path=IsSelected, Mode=TwoWay}"/>
In case you do not have a view model for your tree items you have two options: 1. Switch to WinForm 2. Introduce the view model I supposed you could also try calling methods on the tree view control itself to find it's children, but it will be a LOT more code than the viewmodel, specifically when it start delay loading and virtualizing etc. WPF was designed for a ViewModel, and going against that is always asking for pain.