Включение кнопки в WPF в зависимости от ListBox.SelectedIndex

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

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

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

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

20.08.2008 13:13:16
если под весельем вы имеете в виду совершенно, совершенно ужасный, единственный способ сделать его хуже, что будет с регулярным выражением, то да, это очень весело
Andrew Bullock 3.06.2010 17:01:03
@ Будет хорошая аналогия, потому что я хотел бы разбить гайки резиновым молотком
Cranston 30.05.2013 21:56:37
2 ОТВЕТА
РЕШЕНИЕ

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

<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>
46
31.05.2013 01:00:35

Меньше кода:

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

Если счетчик равен 0, то, по-видимому, отображается в ложь,> 0 в истину

78
18.09.2012 11:25:55
хорошая вещь в другом ответе, вы можете использовать его для 2 списков, оба должны иметь что-то выбранное, чтобы активировать кнопку.
Berty 25.06.2013 20:39:03
это только в том случае, если у списка есть хотя бы один элемент, вопрос заключается в том, чтобы включить кнопку, когда элемент был выбран.
luka 29.09.2017 08:44:17