Abilitazione di un pulsante in WPF in base a ListBox.SelectedIndex
Domanda
Ho una situazione dell'interfaccia utente piuttosto classica: due ListBox denominate SelectedItems
E AvailableItems
- L'idea è che gli elementi che hai già selezionato risiedano SelectedItems
, mentre gli elementi disponibili per l'aggiunta SelectedItems
(cioè.ogni oggetto che non sia già lì) vivono dentro AvailableItems
.
Inoltre, ho il <
E >
pulsanti per spostare la selezione corrente da un elenco all'altro (oltre al doppio clic, che funziona bene).
È possibile in WPF impostare uno stile/trigger per abilitare o disabilitare i pulsanti di spostamento a seconda di qualcosa selezionato in uno dei due ListBox? SelectedItems
è sul lato sinistro, quindi il <
Il pulsante sposterà l'elemento selezionato AvailableItems
a quell'elenco.Tuttavia, se non viene selezionato alcun elemento (AvailableItems.SelectedIndex == -1
), desidero che questo pulsante sia disabilitato (IsEnabled == false
) - e viceversa per l'altro elenco/pulsante.
È possibile farlo direttamente in XAML o devo creare una logica complessa nel codebehind per gestirlo?
Soluzione
Ecco la tua soluzione.
<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>
Altri suggerimenti
Soluzione con meno codice:
<Button Name="button1" IsEnabled="{Binding ElementName=listBox1, Path=SelectedItems.Count}" />
Se count è 0 sembra essere mappato su false, > 0 su true.