Pergunta

Eu tenho uma situação de UI bastante clássica - duas ListBoxes nomeadas SelectedItems e AvailableItems - a ideia é que os itens que você já selecionou residam SelectedItems, enquanto os itens que estão disponíveis para adição SelectedItems (ou seja,cada item que ainda não está lá) mora em AvailableItems.

Além disso, eu tenho o < e > botões para mover a seleção atual de uma lista para outra (além de clicar duas vezes, o que funciona bem).

É possível no WPF configurar um estilo/gatilho para ativar ou desativar os botões de movimentação dependendo de algo selecionado em qualquer ListBox? SelectedItems está no lado esquerdo, então o < botão moverá o selecionado AvailableItems para essa lista.No entanto, se nenhum item for selecionado (AvailableItems.SelectedIndex == -1), quero que este botão seja desativado (IsEnabled == false) - e vice-versa para a outra lista/botão.

Isso é possível fazer diretamente em XAML ou preciso criar uma lógica complexa no codebehind para lidar com isso?

Foi útil?

Solução

Aqui está sua solução.

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

Outras dicas

Solução com menos código:

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

Se a contagem for 0, isso parece mapear para falso,> 0 para verdadeiro.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top