如何将 IsEnabled 属性绑定到两个值的 OR 运算?

问题描述 投票:0回答:4

目前,当我必须对控件的 IsEnabled 属性上的两个值进行 OR 运算时,我最终使用不可见的容器控件(我使用边框)并设置控件的 IsEnabled 和容器的 IsEnabled。

有更好的方法吗?如果没有,那么最轻量级的控件是什么?

提前致谢。

c# .net wpf binding isenabled
4个回答
3
投票

如果通过绑定设置

IsEnabled
,您可以将MultiBinding多值转换器一起使用。


3
投票

您可以使用这样的转换器:

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
投票

可以使用

MultiBinding
和转换器,其中 or 是传入的值。


0
投票

如果您想避免 MultiBinding,或者例如您使用的是不支持 MultiBinding 的 UWP 或 WinUI,则还可以使用 ContentControl 作为容器控件并在那里设置其他 IsEnabled 绑定。

© www.soinside.com 2019 - 2024. All rights reserved.