none
WPF. Привязка значения свойства к ListBox . HasSelection ? RRS feed

  • Вопрос

  • Есть окно WPF с ObservableCollection в качестве контекста данных:

    DataContext = observableCollection;

    В окне коллекция отображается с помощью ListBox. Необходимо привязать (с помощью Binding или Trigger) некоторые свойства элементов управления на форме к тому, выбран ли какой-нибудь элемент в ListBox. Примерно так:

    <Button IsEnabled="{Binding ElementName=listBox, Path=HasSelection>Button</Button>
    
    Но у ListBox нет подобного свойства. Есть только SelectedIndex. Не хотелось писать специальный класс-конвертер для превращения listBox.SelectedIndex != -1. Хочется обойтись по возможности XAML.

    18 августа 2014 г. 16:27

Ответы

  • Добрый день.

    Сделайте наследника ListBox у которого определите такое свойство и тогда работайте с ним через Binding или, что в данном случае правильнее, напишите конвертор и везде на этой форме используйте его.

    • Предложено в качестве ответа LXGDARKEditor 19 августа 2014 г. 7:32
    • Помечено в качестве ответа Димариус 20 августа 2014 г. 7:39
    19 августа 2014 г. 4:46
    Отвечающий

Все ответы

  • Добрый день.

    Сделайте наследника ListBox у которого определите такое свойство и тогда работайте с ним через Binding или, что в данном случае правильнее, напишите конвертор и везде на этой форме используйте его.

    • Предложено в качестве ответа LXGDARKEditor 19 августа 2014 г. 7:32
    • Помечено в качестве ответа Димариус 20 августа 2014 г. 7:39
    19 августа 2014 г. 4:46
    Отвечающий
  • Спасибо за подсказку. Это лучше, чем специальный конвертер. Хотелось это сделать совсем без кода - одним XAML. Нет идей?
    20 августа 2014 г. 4:31
  • Можно поставить (или написать) какое-нибудь расширение для XAML. Например, вот это. И тогда решать такие задачи чисто из XAML-а. На мой взгляд, оно того не стоит. Особенно если вы применяете MVVM. View должна отвечать за пользовательский интерфейс. Точка. Принятие решений о доступности кнопок должно идти в командах, которые к ним привязаны.

    20 августа 2014 г. 5:53
    Отвечающий