WPF HiercharchicalDataTemplate.DataType: Wie soll auf Interfaces reagiert werden?
Proble
Ich habe eine Sammlung vonIThing
s und ich möchte ein @ erstellHierarchicalDataTemplate
Für einTreeView
. Das unkomplizierteDataType={x:Type local:IThing}
funktioniert natürlich nicht, wahrscheinlich, weil die WPF-Ersteller mit den möglichen Mehrdeutigkeiten nicht umgehen wollten.
Da dies sollte behandelnIThing
s kommt nicht in Frage, auf die implementierende Klasse von @s aus verschiedenen Quellen gleichzeitig zu verweisen.
Für jetzt benutze ich ein ViewModel, das IThing durch eine konkrete Implementierung ersetzt:
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>
FragGibt es einen besseren Weg (d. H. Keinen Proxy)?