2012-01-27 20 views
2

私はコンボボックスを持っており、チェックボックスがオフの場合に有効にします。どのように書きますか?私は、次の試してみましたが、WPFはこの構文を認識していないようです:WPFバインディングの式

<ComboBox IsEnabled={Binding Path=!CheckBoxIsChecked, Mode=OneWay}/> 
<CheckBox IsChecked={Binding Path=CheckBoxIsChecked}/> 
+1

私はより一般的なアプローチがhttp://stackoverflow.com/a([ここを参照してください](InverseBooleanConverterを導入することになると考えています/ 1039681/485076))複数のビューにコピー貼り付けトリガーの代わりに必要な場所に貼り付けます – sll

+0

[WPFで逆ブール値のプロパティをバインドするにはどうすればいいですか?](http://stackoverflow.com/questions/1039636/how -to-bind-inverse-boolean-properties-in-wpf) – sll

答えて

-1

トリガは、このためだけにも動作するはずです::このよう

<CheckBox IsChecked="{Binding Path=CheckBoxIsChecked}" /> 
    <ComboBox Grid.Row="1" ItemsSource="{Binding Path=ComboItems}" SelectedItem="{Binding Path=SelectedItem, Mode=TwoWay}"> 
     <ComboBox.Style> 
      <Style TargetType="ComboBox"> 
       <Style.Triggers> 
        <DataTrigger Binding="{Binding Path=CheckBoxIsChecked}" Value="False" > 
         <Setter Property="IsEnabled" Value="True"/> 
        </DataTrigger> 
        <DataTrigger Binding="{Binding Path=CheckBoxIsChecked}" Value="True" > 
         <Setter Property="IsEnabled" Value="False"/> 
        </DataTrigger> 
       </Style.Triggers> 
      </Style> 
     </ComboBox.Style> 
    </ComboBox> 
+0

すでに言及されたsllとしてこの解決策を好むとは思わないでしょう。アプリケーションの複数の場所で、複数のエディターよりもはるかに多くのコードとメンテナンスが不要です。 –

1

あなたは、コンバータ、IValueConverterインタフェースを実装する、すなわちクラスを記述する必要があります。コンバータはバインディングのConverterプロパティに割り当てられます。

<ComboBox IsEnabled="{Binding Path=CheckBoxIsChecked, Mode=OneWay, Converter={StaticResource MyConverter}}"/> 
+0

プロパティの書き込みが簡単です。CheckBoxIsNotChecked {get {return!CheckBoxIsChecked; }} –

+1

はい、自分では書かないオブジェクト、つまりプロパティのセットを制御できないオブジェクトにバインドするとどうなりますか? – Clemens

+0

それは良い点です –

1

このような処理を行うには、コンバータを使用する必要があります。

BoolToVisibilityConverterは、標準WPFコンバータです。 OppositeBoolToVisibilityConverterも簡単に作成できます。ネット上の多くの例。

1

これを実現するには、コンバータを使用する必要があります。

public class BooleanNegationConverter : IValueConverter 
{ 
    public object Convert(object value, Type targetType, object parameter, CultureInfo culture) 
    { 
     return ConvertValue(value); 
    } 
    private bool ConvertValue(object value) 
    { 
     bool boolValue; 
     if(!Boolean.TryParse(value.ToString(), out boolValue)) 
     { 
      throw new ArgumentException("Value that was being converted was not a Boolean", "value"); 
     } 
     return !boolValue; 
    } 
    public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture) 
    { 
     return ConvertValue(value); 
    } 
} 

次に、このようにそれを使用します。

<ComboBox IsEnabled="{Binding Path=CheckBoxIsChecked, 
           Mode=OneWay, 
           Converter={StaticResource BooleanNegationConverterKey}}"/> 

あなたはXAMLリソースでこの静的リソースを宣言する必要が忘れないでください。

<UserControl.Resources> 
    <ResourceDictionary> 
     <BooleanNegationConverter x:Key="BooleanNegationConverterKey" /> 
    </ResourceDictionary> 
</UserControl.Resources>