【发布时间】:2016-12-30 01:22:43
【问题描述】:
我有一个TreeView 绑定到Tileset 的列表。 Tileset 包含 TileGroup,TileGroup 包含 Tile 和 TileRun 实例。 Tile 和 TileRun 都实现了ITile,但最终会有更多的类型实现ITile
我有以下 XAML:
<TreeView
Grid.Row="0"
Grid.Column="0"
BorderThickness="0"
ItemsSource="{Binding Path=Tilesets}">
<TreeView.Resources>
<HierarchicalDataTemplate DataType="{x:Type local:Tileset}" ItemsSource="{Binding Path=TileGroups}">
<TextBlock Text="{Binding Path=Name}" />
</HierarchicalDataTemplate>
<HierarchicalDataTemplate DataType="{x:Type local:TileGroup}" ItemsSource="{Binding Path=Tiles}">
<TextBlock Text="{Binding Path=Name}" />
</HierarchicalDataTemplate>
<DataTemplate DataType="{x:Type tiles:ITile}">
<TextBlock Text="{Binding Path=Name}" />
</DataTemplate>
</TreeView.Resources>
</TreeView>
Tileset 和TileGroup 选择正确的DataTemplate 但ITile 没有选择,没有选择模板,树只显示数据类型。
但是,如果我明确地为Tile 和TileRun 添加DataTemplate,一切都会很好。不过我不想这样做,因为最终会有更多的类实现ITile。
我知道我可以使用 DataTemplateSelector 来处理这个问题,但如果可能的话,我想要一个纯 XAML 解决方案。
我在这里做错了什么,还是 WPF 只是不支持这种基于接口的自动模板选择?
【问题讨论】: