Как повторно использовать HierarchicalDataTemplate?
У меня есть две идентичные иерархические таблицы. Единственное различие - это тип данных шаблонов.
<HierarchicalDataTemplate DataType="{x:Type Data:OuterType}"
ItemsSource="{Binding Items}">
<StackPanel>...</StackPanel>
</HierarchicalDataTemplate>
<HierarchicalDataTemplate DataType="{x:Type Data:InnerType}"
ItemsSource="{Binding Items}">
<StackPanel>...</StackPanel>
</HierarchicalDataTemplate>
Как избежать дублирования содержимого панели стека в обоих шаблонах данных?
Я рассматривал возможность превращения StackPanel в пользовательский элемент управления, но это единственное место, где этот элемент управления когда-либо будет использоваться. Я бы предпочел, чтобы StackPanel был каким-то ресурсом, но я не могу понять, как это сделать.
1 ответ:
Я бы пошел по пути создания отдельных шаблонов для вещей, которые должны выглядеть одинаково, как это:
<DataTemplate x:Key="sharedTemplate"> <StackPanel>...</StackPanel> </DataTemplate> <HierarchicalDataTemplate DataType="{x:Type InnerType}" ItemsSource="{Binding Items}"> <ContentControl Content="{Binding}" ContentTemplate="{StaticResource sharedTemplate}" /> </HierarchicalDataTemplate> <HierarchicalDataTemplate DataType="{x:Type OuterType}" ItemsSource="{Binding Items}"> <ContentControl Content="{Binding}" ContentTemplate="{StaticResource sharedTemplate}" /> </HierarchicalDataTemplate>
Есть архитектурно более элегантные решения, но видя, что внешний вид обрабатывается дизайнерами, я не люблю использовать решения, которые являются слишком сложной парадигмой программирования, мудрой в этих вещах.