Habilitando um botão no WPF dependendo de ListBox.SelectedIndex
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?
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.