2008-08-20 11 views
23

Mam raczej klasyczną sytuację interfejsu użytkownika - dwie listy ListBox o nazwach SelectedItems i AvailableItems - chodzi o to, że elementy, które wybrałeś, żyją w SelectedItems, podczas gdy elementy, które są dostępne do dodania do SelectedItems (tj. każdy przedmiot, który jeszcze tam nie jest), żyje w AvailableItems.Włączanie przycisku w WPF w zależności od ListBox.SelectedIndex

Mam również przyciski < i > do przenoszenia bieżącego zaznaczenia z jednej listy na drugą (oprócz podwójnego kliknięcia, które działa poprawnie).

Czy jest możliwe w WPF ustawienie stylu/wyzwalacza, aby włączyć lub wyłączyć przyciski przesuwania w zależności od tego, co zostało wybrane w ListBox? SelectedItems jest po lewej stronie, więc przycisk < przeniesie wybraną AvailableItems do tej listy. Jeśli jednak nie wybrano żadnych elementów (AvailableItems.SelectedIndex == -1), chcę wyłączyć ten przycisk (IsEnabled == false) - i odwrotnie, aby wyświetlić drugą listę/przycisk.

Czy można to zrobić bezpośrednio w XAML, czy też potrzebuję stworzyć złożoną logikę w kodzie, aby się z tym uporać?

+2

jeśli przez zabawę masz na myśli absolutnie, okropnie, jedyny sposób, by zrobić to gorzej, to będzie z regexem, to świetna zabawa –

+1

@Will To dobra analogia, ponieważ chciałbym uwielbiam rozbijać orzechy gumowym młotkiem – Cranston

Odpowiedz

42

Oto twoje rozwiązanie.

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

Mniej rozwiązanie kod:

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

Jeśli liczba jest 0, który wydaje się mapa false> 0 true.

+0

miłą rzeczą w drugiej odpowiedzi jest to, że możesz użyć jej do 2 list, oba muszą mieć coś zaznaczonego, aby włączyć przycisk. – Berty

+0

jest to tylko wtedy, gdy lista zawiera co najmniej jedną pozycję, pytanie to przycisk włączania po wybraniu elementu. – luka