Как связать свойство 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
с преобразователем, который или значения передаются в.