Problem
I've got a collection of IThing
s and I'd like to create a HierarchicalDataTemplate
for a TreeView
. The straightforward DataType={x:Type local:IThing}
of course doesn't work, probably because the WPF creators didn't want to handle the possible ambiguities.
Since this should handle IThing
s from different sources at the same time, referencing the implementing class is out of question.
Current solution
For now I'm using a ViewModel which proxies IThing through a concrete implementation:
public interface IThing {
string SomeString { get; }
ObservableCollection<IThing> SomeThings { get; }
// many more stuff
}
public class IThingViewModel
{
public IThing Thing { get; }
public IThingViewModel(IThing it) { this.Thing = it; }
}
<!-- is never applied -->
<HierarchicalDataTemplate DataType="{x:Type local:IThing}">
<!-- is applied, but looks strange -->
<HierarchicalDataTemplate
DataType="{x:Type local:IThingViewModel}"
ItemsSource="{Binding Thing.SomeThings}">
<TextBox Text="{Binding Thing.SomeString}"/>
</HierarchicalDataTemplate>
Question
Is there a better (i.e. no proxy) way?