问题
我有一个IThing
s 的集合,我想HierarchicalDataTemplate
为 a 创建一个TreeView
。直截了当DataType={x:Type local:IThing}
当然行不通,可能是因为 WPF 创建者不想处理可能的歧义。
由于这应该同时处理IThing
来自不同来源的 s,所以引用实现类是没有问题的。
当前解决方案
现在我正在使用通过具体实现代理 IThing 的 ViewModel:
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>
问题
有没有更好的(即没有代理)方式?