2015-09-09 3 views
2
<Button Content="1" Background="{Binding HotNumbers, Converter={StaticResource BrushConverter} }"/> 
<Button Content="2" Background="{Binding HotNumbers, Converter={StaticResource BrushConverter} }"/> 

..WPF мульти-кнопка изменения BackgroundColor

У меня есть 10 кнопок. Я пытаюсь связать цвет фона каждого с ObservableCollection<bool>. Я попытался использовать IValueConverter, чтобы преобразовать значение boolean в цвет кисти, как показано ниже.

Но вся коллекция, кажется, передается в значении объекта, а не в одном элементе, бросающем исключение в конвертер.

public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture) 
     { 
      if ((bool)value) 
      { 
       return Brushes.Red; 
      } 
      else 
      { 
       return Brushes.White; 
      } 
     } 

Есть ли другой способ для этого, так что мне не нужно создавать 10 разных свойств для каждой кнопки.

ответ

2

Я думаю, что это будет работать только с этим:

<Button Content="1" Background="{Binding HotNumbers[0], Converter={StaticResource BrushConverter}}"/> 
<Button Content="2" Background="{Binding HotNumbers[1], Converter={StaticResource BrushConverter}}"/> 
+0

Спасибо @Kireneko. Немного подробный, но он работает. – tarzan

+0

Вы добрый @ tarzan, надеюсь, что это поможет. – Jose

2

Почему вы просто не добавляете ConverterParameter в свой код xaml, как это?

Background = "{Binding HotNumbers, конвертер = {StaticResource BrushConverter}, ConverterParameter = 1}"

, а затем в конверторе вы используете параметр объекта для доступа к конкретному булеву элемент вашего массива, как это ?

public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture) 
    { 
     if ((bool)value[(int)parameter]) 
     { 
      return Brushes.Red; 
     } 
     else 
     { 
      return Brushes.White; 
     } 
    } 
+0

Отливка не работает. Невозможно применить индексирование с [] к выражению типа 'object' – tarzan

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