2014-02-03 5 views
0

См. Ниже, у всех 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> 

ответ

2

Мне кажется, было бы гораздо лучше, чтобы сделать что-то вроде этого:

<DataTemplate x:Key="fieldStringTemplate"> 
    <TextBox Text="{Binding Path=FieldValue}" /> 
</DataTemplate> 

<DataTemplate x:Key="fieldDateTemplate"> 
    <DatePicker SelectedDate="{Binding Path=FieldValue}" /> 
</DataTemplate> 

<!-- and so on... --> 

<DataTemplate x:Key="common"> 
    <StackPanel> 
     <TextBlock Text="{Binding Path=Name}" /> 
     <TextBlock Text="{Binding Path=DisplayValue}" /> 
     <ContentPresenter Content="{Binding}" 
         ContentTemplateSelector="{StaticResource fieldTemplateSelector}"/> 
    </StackPanel> 
</DataTemplate> 

<ListBox ItemsSource="{Binding Path=Fields}" 
     ItemTemplate="{StaticResource common}" 
     HorizontalContentAlignment="Stretch"> 
</ListBox> 
+0

Я думаю, что я следую. Я дам ему попробовать. благодаря – Paparazzi

Смежные вопросы