Habilitar un botón en WPF dependiendo de ListBox.Índice seleccionado


Tengo una situación de interfaz de usuario bastante clásica - dos ListBoxes llamados SelectedItems y AvailableItems - la idea es que los elementos que ya ha seleccionado viven en SelectedItems, mientras que los elementos que están disponibles para agregar a SelectedItems (es decir, todos los elementos que no están ya allí) viven en AvailableItems.

Además, tengo los botones < y > para mover la selección actual de una lista a otra (además de hacer doble clic, que funciona bien).

¿Es posible en WPF configurar un estilo / disparador para activar o desactivar los botones de movimiento en función de cualquier cosa que se selecciona en cualquiera de los ListBox? SelectedItems está en el lado izquierdo, por lo que el botón < moverá el AvailableItems seleccionado a esa lista. Sin embargo, si no hay elementos seleccionados (AvailableItems.SelectedIndex == -1), quiero que este botón esté desactivado (IsEnabled == false) - y al revés para la otra lista/botón.

¿Es posible hacer esto directamente en XAML, o necesito crear lógica compleja en el código para manejarlo?

 23
Author: demonplus, 2008-08-20

2 answers

Aquí está su solución.

<Button Name="btn1" >click me    
    <Button.Style>        
        <Style>            
            <Style.Triggers>                
                <DataTrigger 
                     Binding ="{Binding ElementName=list1, Path=SelectedIndex}" 
                     Value="-1">                    
                    <Setter Property="Button.IsEnabled" Value="false"/>                    
                </DataTrigger>                
            </Style.Triggers>            
        </Style>        
    </Button.Style>    
</Button>
 42
Author: Will,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2013-05-31 01:00:35

Menos solución de código:

<Button Name="button1" IsEnabled="{Binding ElementName=listBox1, Path=SelectedItems.Count}" />

Si count es 0 que parece asignar a false, > 0 a true.

 71
Author: Karlas,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2012-09-18 11:25:55