2008-08-20 1 views
23

У меня довольно классическая ситуация с пользовательским интерфейсом - два списка по имени SelectedItems и AvailableItems - идея состоит в том, что элементы, которые вы уже выбрали, живут в SelectedItems, а элементы, доступные для добавления до SelectedItems (т. е. каждый элемент, который еще не находится там) живут в AvailableItems.Включение кнопки в WPF в зависимости от ListBox.SelectedIndex

Кроме того, у меня есть кнопки < и >, чтобы переместить текущий выбор из одного списка в другой (в дополнение к двойному щелчку, который отлично работает).

Возможно ли в WPF установить стиль/триггер, чтобы включить или отключить кнопки перемещения в зависимости от того, что выбрано в ListBox? SelectedItems находится с левой стороны, поэтому кнопка < переместит выбранный AvailableItems в этот список. Однако, если никакие пункты не выбраны (AvailableItems.SelectedIndex == -1), я хочу, чтобы эта кнопка была отключена (IsEnabled == false) - и наоборот для другого списка/кнопки.

Можно ли это сделать непосредственно в XAML, или мне нужно создать сложную логику в коде для ее обработки?

+2

Если по веселью вы имеете в виду совершенно, совершенно ужасно, то-только-путь-к-make-it-хуже-буду-с-regex, тогда да, его отличная забава – 2010-06-03 17:01:03

+1

@Will Это хорошая аналогия, потому что я бы любить разбить орехи резиновым молотком – Cranston 2013-05-30 21:56:37

ответ

42

Вот ваше решение.

<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

Меньше кода решение:

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

Если счетчик равен 0, что, кажется, карта ложь,> 0 верно.

Смежные вопросы