Как связать свойство IsEnabled с ИЛИ из двух значений?

В настоящее время, когда мне нужно сделать OR из двух значений в свойстве IsEnabled элемента управления, я заканчиваю с использованием невидимого контейнерного элемента управления (я использую Border) и устанавливаю IsEnabled для элемента управления и одного из контейнера.

Есть ли лучший подход? Если нет, то какой самый легкий контроль для этого?

Заранее спасибо.

3 ответа

Решение

Если IsEnabled устанавливается через привязку, вы можете использовать MultiBinding в сочетании с многозначным преобразователем.

Вы можете использовать конвертер как это:

public class BooleanOrConverter : IMultiValueConverter
{
    public object Convert(object[] values, Type targetType, object parameter, System.Globalization.CultureInfo culture)
    {
        foreach (object value in values)
        {
            if ((value is bool) && (bool)value == true)
            {
                return true;
            }
        }
        return false;
    }
    public object[] ConvertBack(object value, Type[] targetTypes, object parameter, System.Globalization.CultureInfo culture)
    {
        throw new NotSupportedException("BooleanOrConverter is a OneWay converter.");
    }
}

И вот как вы бы это использовали:

<myConverters:BooleanOrConverter x:Key="BooleanOrConverter" />
...
<ComboBox Name="MyComboBox">
  <ComboBox.IsEnabled>
    <MultiBinding Converter="{StaticResource BooleanOrConverter}">
      <Binding ElementName="SomeCheckBox" Path="IsChecked" />
      <Binding ElementName="AnotherCheckbox" Path="IsChecked"  />
    </MultiBinding>
  </ComboBox.IsEnabled>
</ComboBox>

Могли бы использовать MultiBinding с преобразователем, который или значения передаются в.

Другие вопросы по тегам