【问题标题】:How to bind the IsEnabled property to an OR of two values?如何将 IsEnabled 属性绑定到两个值的 OR?
【发布时间】:2012-03-31 09:29:38
【问题描述】:

目前,当我必须对控件的 IsEnabled 属性进行两个值的 OR 操作时,我会使用不可见的容器控件(我使用边框)结束并设置控件的 IsEnabled 和容器之一。

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

提前致谢。

【问题讨论】:

标签: c# .net wpf binding isenabled


【解决方案1】:

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

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>

【讨论】:

    【解决方案2】:

    如果IsEnabled 是通过绑定设置的,您可以将MultiBindingmulti-value converter 结合使用。

    【讨论】:

    • 老实说,我发现自己的解决方案更简单:D 但我明白你所说的。
    【解决方案3】:

    可以将MultiBinding 与传入的值或值的转换器一起使用。

    【讨论】:

      猜你喜欢
      • 2019-12-25
      • 1970-01-01
      • 1970-01-01
      • 2014-10-17
      • 1970-01-01
      • 2021-09-25
      • 1970-01-01
      • 2012-06-10
      • 1970-01-01
      相关资源
      最近更新 更多