2012-03-14 3 views
0

現在、コントロールのIsEnabledプロパティに2つの値の論理和をとる必要があるときに、私は不可視のコンテナコントロール(境界線を使用)を使用し、コントロールのIsEnabledとコンテナのIsEnabledを設定します。IsEnabledプロパティを2つの値のORにバインドする方法はありますか?

良いアプローチがありますか?そうでない場合は、これを行うための最も軽量なコントロールは何ですか?

ありがとうございます。

+1

とその代わりにバインドします。 – dlev

+1

訪問 http://stackoverflow.com/questions/945427/c-sharp-wpf-isenabled-using-multiple-bindings – GANI

答えて

3

IsEnabledが結合を介して設定されている場合は、あなたがmulti-value converterと一緒に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."); 
    } 
} 

そして、これはあなたがそれを使用する方法である:

+1

は正直なところ、私は簡単に自分の解決策を見つける:Dしかし、私はあなたが言うものを手に入れます。 –

1

は、渡された値ですまたはコンバータでMultiBindingを使用することができます。

2

あなたはこのようにコンバータを使用することができますあなたはViewModelにに結合している場合は、集計プロパティを作成することができます

<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> 
関連する問題