Как связать свойство IsEnabled с ИЛИ из двух значений? - PullRequest
0 голосов
/ 15 марта 2012

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

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

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

Ответы [ 3 ]

3 голосов
/ 15 марта 2012

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

2 голосов
/ 22 ноября 2013

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

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>
1 голос
/ 15 марта 2012

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

...