2008-11-13 5 views
11

Tengo una página con varios controles. Los controles están obligados a mostrar los valores que obtienen del DataContext de la página. Lo que me gustaría hacer es mostrar otra apariencia de la página si el DataContext es nulo. En algunos casos, los controles de la página deberían mostrarse de manera diferente si "su" propiedad está configurada o no.Cómo desencadenar un cambio de estilo si DataContext es nulo o no se usa WPF

¿Es posible crear un enlace para ver si está configurado el DataContext?

Lo que hice como una solución fue la de añadir una propiedad IsDataContextSet a la página y el especificar una unión como:

Binding="{Binding RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type Page}}, Path=IsDataContextSet}" Value="false" 

Esto funciona como espero, pero tengo la sensación de que su es forma más elegante de hacer esto. O al menos o más de manera WPFish.

Respuesta

18

Dado el escenario que describe, establecería las propiedades con un estilo y un disparador de datos. El disparador de datos usaría el enlace predeterminado que es el contexto de datos.

Un ejemplo podría tener este aspecto:

<Border> 
    <Border.Style> 
     <Style TargetType="Border"> 
      <Setter Property="Background" 
        Value="Orange" /> 
      <Style.Triggers> 
       <DataTrigger Binding="{Binding}" 
          Value="{x:Null}"> 
        <Setter Property="Background" 
          Value="Yellow" /> 
       </DataTrigger> 
      </Style.Triggers> 
     </Style> 
    </Border.Style> 
</Border> 

La frontera será de color naranja a menos que el contexto de datos es nulo, en cuyo caso el fondo es de color amarillo.

+0

Hmm, después de volver a leer su pregunta, no creo que realmente la haya respondido. –

+1

Esta es básicamente la respuesta correcta. Configure su encuadernación/estilos de forma normal y agregue un desencadenador a DataContext que sea x: nulo para cambiar a un conjunto diferente de estilos/enlaces. –

+0

Esto era realmente lo que estaba buscando. Estaba tan atrapado en la sintaxis RelativeSource, FindAncestor, Self, así que olvidé que todo lo que quería saber era cómo comprobar si una propiedad era nula. –

Cuestiones relacionadas