Звучит так, будто вы пытаетесь составить представление Master / Detail? Где MasterView содержит TreeView всех DetailView.
Так что ViewModels выглядит примерно так:
public class DataListViewModel
{
public DataDetailViewModel[] AllData {get;}
}
public class DataDetailViewModel
{
public Data Model {get;}
public DataListViewModel Parent {get;}
}
Если это более или менее точно, то у вас впереди довольно лёгкий путь, и вам сначала нужно выбрать View or ViewModel.
При первом выборе View вы можете использовать DataTemplate для TreeView, который будет управлять элементом TreeViews.
<DataTemplate x:Key="dataTemplate">
<my:DataDetailView DataContext="{Binding Path=.}" />
</DataTemplate>
Просто убедитесь, что ваш View имеет конструктор по умолчанию.
При первом выборе ViewModel вам нужно будет использовать TemplateSelector, который будет вытягивать правильный View в зависимости от устанавливаемого объекта. Это, вероятно, наиболее гибкий способ, поскольку вы можете использовать различные представления в зависимости от класса Detail.
Для получения дополнительной информации см. Ссылку http://www.switchonthecode.com/tutorials/wpf-tutorial-how-to-use-a-datatemplateselector