2011-04-24 12 views
30

Quiero crear un control de usuario que contenga un cuadro combinado y un control de contenido. La elección realizada en el cuadro combinado debería determinar la plantilla de datos que usaría el control de contenido. He leído this article, que demuestra bastante bien lo que estoy tratando de lograr.WPF: ¿Cómo se configura la activación de la plantilla de datos para el control del contenido?

El cuadro combinado está lleno con los valores enum ModelType, que pueden ser Person o Company. Si el usuario elige Person, el control de contenido debe usar la plantilla de datos personTemplate; y companyTemplate para Company.

Me quedé atrapado con el código XAML para el control de contenido. Esto es lo que he creado pero no puedo hacer que funcione:

<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> 

Gracias, gracias.

Respuesta

77

De hecho, lo hice funcionar. :)

Esto es lo que se supone que el XAML para parecerse a:

<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> 

Los valores de la enumeración también funcionan bien. Espero que esto ayude a algunas personas necesitadas.

+3

Gracias, hombre ... esto realmente me ayudó. – danjarvis

+3

¿Tienes una jarra de propinas en alguna parte? ¿Cómo puedo enviarte una cerveza? – gonzobrains

Cuestiones relacionadas