2017-02-08 5 views
1

私の同僚は、Wpfでのバインディングでちょっとした奇妙な動作に遭遇しました。WPF MVVM - チェックボックスを無効にすると、IsEnabledにバインドされたプロパティのセッターが機能する必要があります。

  • 表示無効]チェックボックスを
  • バインド(ユーザーがそれをクリックすることで、それを設定することはできません)このチェックボックスは、いくつかのブール値ににisChecked:すべてここの

    まず、彼が達成したいものです一部のフィルタがアクティブであるかどうかをユーザに通知します。コードで

プロパティは次のようになります。

C#

public bool IsFooBarFilterEnabled 
{ 
    get 
    { 
     return _isFoo && _isBar; 
    } 
} 

XAML

<CheckBox IsChecked="{Binding IsFooBarFilterEnabled}" IsEnabled="False" /> 

彼は_isFooまたは_isBarを設定whenerそれから彼はを呼び出します

これまでのところすべてがうまく見えましたが、コードは機能しません。

私たちは、このような空のセッター追加する必要がありました:私の質問がどこにあるのです

public bool IsFooBarFilterEnabled 
{ 
    get 
    { 
     return _isFoo && _isBar; 
    } 
    set{}// that's not what i would call beautifull code 
} 

を。チェックボックスを無効にすると、IsFooBarFilterEnabled上のセッターは決して呼び出されません。なぜクラッシュを避けるために作成する必要がありますか?私たちの間違いは何ですか?

+1

私が正しくあなたを理解していれば、あなたは例えば、 '<チェックボックスにisChecked = "{IsFooBarFilterEnabled、モードをバインド=一方向}" でIsEnabledは= "false" に結合一つの方法を使用する必要があります/>あなたがセッターを必要としないように –

答えて

2

デフォルトでは、Binding ModeTwoWayに設定されています。つまり、プロパティとコンポーネントの両方を変更する必要があります。また、ComboBoxdisabledになりました。となっていますが、無効になるわけではありません。常にです。

あなたは(あなたが結合TwoWayを続行したい場合)空のセットを作成したり、設定しなければならないのいずれかBinding Modeを意味している(OneWayとして成分のみが更新されるときにプロパティの変更ではなく、他の方法で回避 - 別名プロパティは読み込み専用です)。ここで

は例です:

<CheckBox IsChecked="{Binding IsFooBarFilterEnabled, Mode=OneWay}" IsEnabled="False" /> 
+0

それだけです!ありがとう –

関連する問題