2008-11-19 12 views
6

Tengo una pestaña que debería ocultarse si una propiedad (BlahType) está configurada en 1 y se muestra si está configurada en 0. Esto es lo que QUIERO que hacer:¿Cómo puedo establecer selectivamente la "Visibilidad" de un TabItem a través de DataBinding/Triggers

<TabItem Header="Blah"> 
    <TabItem.Triggers> 
     <DataTrigger Binding="{Binding BlahType}" Value="0"> 
      <Setter Property="TabItem.Visibility" Value="Hidden" /> 
     </DataTrigger> 
    </TabItem.Triggers> 
</TabItem> 

El problema es que me sale este error:

"Triggers collection members must be of type EventTrigger" 

Si se busca en Google ese error, verá que Dr. WPF explains the error. ¿Hay una manera limpia de hacer lo que estoy tratando de lograr aquí?

Respuesta

13

Creo que la colección Triggers de un control solo admite actualmente EventTriggers. Si desea utilizar un DataTrigger simplemente colocarlo dentro de un estilo, por su ejemplo:

<TabItem Header="Blah"> 
    <TabItem.Style> 
     <Style> 
      <Style.Triggers> 
       <DataTrigger Binding="{Binding BlahType}" Value="0"> 
        <Setter Property="TabItem.Visibility" Value="Hidden" /> 
       </DataTrigger> 
      </Style.Triggers> 
     </Style> 
    </TabItem.Style> 
</TabItem> 
+0

Usted tiene un ligero error tipográfico ... "" debe ser "" ... esto es genial, gracias! –

+0

¡De acuerdo, gracias por recoger eso! –

0

Bueno, no se puede hacer eso usando desencadenadores (no a menos que se encuentre dentro de una plantilla de plantilla de datos, de control o de estilo).

Puede hacerlo utilizando un enlace, tendrá que escribir un ValueConverter personalizado que se traducirá entre 0/1 a Visible/Oculto y luego puede vincular la propiedad Visibilidad a la propiedad BlhaType.

O simplemente puede establecer la Visibilidad en el código y renunciar a un enfoque basado en XAML (que lo que habría hecho).

Cuestiones relacionadas