Задача
У меня есть коллекция IThing
с, и я хотел бы создать HierarchicalDataTemplate
для TreeView
. Простое DataType={x:Type local:IThing}
, конечно, не работает, вероятно, потому что создатели WPF не хотели обрабатывать возможные неоднозначности.
Поскольку это должно обрабатывать IThing
s из разных источников одновременно, ссылка на реализующий класс исключена.
Текущее решение
Пока я использую ViewModel, который проксирует IThing через конкретную реализацию:
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>
Вопрос
Есть ли лучший (т.е. без прокси) способ?