のリストにバインドされたTreeView
があります。 Tileset
はTileGroup
を含み、TileGroup
はTile
とTileRun
の両方のインスタンスを含みます。 Tile
とTileRun
ITile
を実装するが、結局そこに、私は以下のXAML持っITile
WPFでの自動テンプレート選択がインターフェイスで動作しない
を実施し、より多くの種類になります両方:
<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
を実装し、より多くのクラスがあるだろうとして、それにもかかわらず行うにはしたくないgreat.I動作します。
私はDataTemplateSelector
を使用してこれを処理できることを知っていますが、可能であれば純粋なXAMLソリューションが必要です。
ここで何か間違っているのですか、WPFはインターフェイスに基づいてこのタイプの自動テンプレート選択をサポートしていませんか?
が重複する可能性を[インターフェイスへのWPFデータバインディングと実際のオブジェクトのキャストはできませんか?](https://stackoverflow.com/questions/327984/wpf-databinding-to-interface-and-not-actual-object-casting-possible) –