2011-06-10 12 views
8

Configuré el datacontext dinámicamente en el código. Me gustaría que un botón en la pantalla se habilite/deshabilite según DataContext == null o no. Puedo hacerlo en código cuando asigno el DataContext pero sería mejor si puedo enlazar así :)wpf cómo enlazar a la existencia de DataContext?

Respuesta

13

Debería poder usar un DataTrigger en el estilo del botón para desactivar su botón cuando el DataContext es nulo. La otra opción es vincular la propiedad IsEnabled al DataContext y usar un convertidor de valor para devolver false si DataContext es nulo y true de lo contrario.

Con gatillo:

<Button> 
    <Button.Style> 
     <Style TargetType="{x:Type Button}"> 
      <Style.Triggers> 
      <DataTrigger Binding="{Binding Path=DataContext, RelativeSource={RelativeSource Self}}" Value="{x:Null}"> 
       <Setter Property="IsEnabled" Value="false"/> 
      </DataTrigger> 
      </Style.Triggers> 
     </Style> 
    </Button.Style> 
</Button> 

Con convertidor:

Convertidor:

public class DataContextSetConverter : IValueConverter 
{ 
    public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture) 
    { 
     return value != null; 
    } 

    public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture) 
    { 
     throw new NotImplementedException(); 
    } 
} 

y usarlo

<UserControl.Resources> 
    <local:DataContextSetConverter x:Key="dataContextSetConverter"/> 
</UserControl.Resources> 

... 

<Button IsEnabled="{Binding Path=DataContext, RelativeSource={RelativeSource Self}, Converter={StaticResource dataContextSetConverter}}"/> 
+0

¿Qué tal un convertidor puede verse? – katit

4

Esto debe hacerlo:

<Button Content="ButtonName"> 
     <Button.Style> 
      <Style TargetType="{x:Type Button}"> 
       <Style.Triggers> 
        <DataTrigger Binding="{Binding RelativeSource={RelativeSource Self}, Path=DataContext}" Value="{x:Null}"> 
         <Setter Property="Visibility" Value="Collapsed" /> 
        </DataTrigger> 
       </Style.Triggers> 
      </Style> 
     </Button.Style> 
    </Button> 
Cuestiones relacionadas