Подтвердить что ты не робот

WPF: Как установить триггер шаблона данных для управления контентом?

Я хочу создать пользовательский элемент управления, который содержит одно поле со списком и элемент управления содержимым. Выбор, сделанный в поле со списком, должен определять шаблон данных, который будет использовать элемент управления содержимым. Я прочитал эту статью, которая в значительной степени демонстрирует то, что я пытаюсь достичь.

Комбинированное поле заполнено значениями enum ModelType, которые могут быть Person или Company. Если пользователь выбирает Person, элемент управления содержимым должен использовать шаблон данных personTemplate; и companyTemplate для Company.

Я застрял с кодом XAML для управления контентом. Вот что я создал, но я не могу заставить его работать:

<UserControl.Resources>
  ...
  <DataTemplate x:Key="personTemplate" ...>
  <DataTemplate x:Key="companyTemplate" ...>
  ...
</UserControl.Resources>
...
<ContentControl x:Name="Account">
  <ContentControl.ContentTemplate>
    <DataTemplate>
      <DataTemplate.Triggers>
        <DataTrigger Binding="{Binding AccountType}" Value="Person">
        <!-- I doubt the Value property is set correctly. -->
        <!-- It should be a value of an enum ModelType -->
          <Setter 
              TargetName="Account" 
              Property="ContentTemplate" 
              Value="{StaticResource personTemplate}" />
          <!-- The setter is unaware of the target name, i.e. content control -->
        </DataTrigger>
        <DataTrigger Binding="{Binding AccountType}" Value="Company">
          <Setter 
              TargetName="Account" 
              Property="ContentTemplate" 
              Value="{StaticResource companyTemplate}" />
        </DataTrigger>
      </DataTemplate.Triggers>
    </DataTemplate>
  </ContentControl.ContentTemplate>                    
</ContentControl>

Пожалуйста, помогите, спасибо.

4b9b3361

Ответ 1

Я действительно получил его на работу.:)

Вот что должно выглядеть XAML:

<ContentControl Content="{Binding}">
  <ContentControl.Style>
    <Style TargetType="ContentControl">
      <Style.Triggers>
        <DataTrigger Binding="{Binding AccountType}" Value="Person">
          <Setter Property="ContentTemplate" Value="{StaticResource personTemplate}" />
        </DataTrigger>
        <DataTrigger Binding="{Binding AccountType}" Value="Company">
          <Setter Property="ContentTemplate" Value="{StaticResource companyTemplate}" />
        </DataTrigger>
      </Style.Triggers>
    </Style>
  </ContentControl.Style>
</ContentControl>

Значения перечисления также хорошо работают. Надеюсь, это поможет некоторым нуждающимся.