DataTemplateSelector で HierarchicalDataTemplate を使用したいのですが、順序に問題があります。
<UserControl.Resources>
<HierarchicalDataTemplate x:Key="TemplateA"
ItemsSource="{Binding AnySource}"
ItemTemplateSelector="{StaticResource MyTemplateSelector}" >
<Label Content="A" />
</HierarchicalDataTemplate>
<DataTemplate x:Key="TemplateB">
<Label Content="B" />
</DataTemplate>
<viewmodel:MyTemplateSelector
TemplateA="{StaticResource TemplateA}"
TemplateB="{StaticResource TemplateB}"
x:Key="MyTemplateSelector" />
<HierarchicalDataTemplate x:Key="TemplateC"
ItemsSource="{Binding AnotherSource}"
ItemTemplateSelector="{StaticResource MyTemplateSelector}">
<Label Content="C" />
</HierarchicalDataTemplate>
</UserControl.Resources>
<Grid>
<TreeView
ItemsSource="{Binding Source={StaticResource SomeList}}"
ItemTemplate="{StaticResource TemplateC}"/>
</Grid>
MyTemplateSelector は TemplateA に依存し、TemplateA は MyTemplateSelector に依存します。実行時に System.Windows.Markup.XamlParseException が発生します。XAML に前方宣言の方法はありますか、それとも別の解決策がありますか?
解決策: 親の DataTemplate に設定されているため、TemplateA に TemplateSelector を設定する必要はありません。時にはそれはとても単純なことかもしれません...