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

时间:2012-03-14 20:57:26

标签: c# .net wpf binding isenabled

目前,当我必须在控件的IsEnabled属性上进行两个值的OR时,我使用一个不可见的容器控件(我使用一个Border)并设置控件的IsEnabled和一个容器。

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

提前致谢。

3 个答案:

答案 0 :(得分:3)

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

答案 1 :(得分:2)

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

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 :(得分:1)

可以使用带有转换器的MultiBinding或者传入的值。