Я хочу использовать HierarchicalDataTemplate с DataTemplateSelector, но я получаю проблемы с заказом: Переслать объявление в XAML, чтобы разрешить циклическую зависимость от DataTemplate
<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 или есть другое решение?
Решение: Я нашел решение: мне не нужно, чтобы установить TemplateSelector в TemplateA, потому что он установлен в родительском DataTemplate. Иногда это может быть так просто ...
должен быть какой-то лучший способ сделать то, что вы пытаетесь сделать ... можете ли вы поделиться, где вы применяете свои шаблоны, и какова структура данных, которую вы хотите связать? – Nitin
Я добавил дополнительную информацию, но я думаю, что они не помогают. Структура данных для привязки сложна, чтобы показать ее здесь простым способом, но я знаю: мне нужен DataTemplateSelector. – user37337