См. Ниже, у всех DataTemplates есть те же первые два TextBlock.
В полеStringTemplate и fieldDateTemplate я хотел бы ссылаться на fieldTemplate, поэтому я не повторяю эти два.
Как обратиться к DataTemplate из DataTemplate?DataTemplate Включает другой DataTemplate
Реальное приложение имеет гораздо больше шаблонов и множество других элементов.
В реальном приложении это классы, которые реализуют Field.
FieldTemplateSelector основан на классе.
<Window.Resources>
<local:FieldTemplateSelector x:Key="fieldTemplateSelector"/>
<DataTemplate x:Key="fieldTemplate">
<StackPanel>
<TextBlock Text="{Binding Path=Name}" />
<TextBlock Text="{Binding Path=DisplayValue}" />
</StackPanel>
</DataTemplate>
<DataTemplate x:Key="fieldStringTemplate">
<StackPanel>
<TextBlock Text="{Binding Path=Name}" />
<TextBlock Text="{Binding Path=DisplayValue}" />
<TextBox Text="{Binding Path=FieldValue}" />
</StackPanel>
</DataTemplate>
<DataTemplate x:Key="fieldDateTemplate">
<StackPanel>
<TextBlock Text="{Binding Path=Name}" />
<TextBlock Text="{Binding Path=DisplayValue}" />
<DatePicker SelectedDate="{Binding Path=FieldValue}" />
</StackPanel>
</DataTemplate>
</Window.Resources>
<Grid>
<ListBox ItemsSource="{Binding Path=Fields}"
ItemTemplateSelector="{StaticResource fieldTemplateSelector}"
HorizontalContentAlignment="Stretch">
</ListBox>
</Grid>
Я думаю, что я следую. Я дам ему попробовать. благодаря – Paparazzi