2012-03-14 85 views
0

当我必须在控件的IsEnabled属性上创建两个值的OR时,我使用不可见的容器控件(我使用边框)并设置控件的IsEnabled和容器的一个。如何将IsEnabled属性绑定到两个值的OR?

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

在此先感谢。

+1

如果你绑定到视图模型,你可以创建一个聚合性,改为绑定。 – dlev 2012-03-14 21:06:26

+1

访问 http://stackoverflow.com/questions/945427/c-sharp-wpf-isenabled-using-multiple-bindings – GANI 2012-03-14 21:08:13

回答

3

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

+1

老实说,我更容易找到自己的解决方案:d,但我得到你说什么。 – 2012-03-14 21:03:51

1

可以使用MultiBinding用转换器,或在传递的值。

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> 
相关问题