6

今日はUIデザインの変更に伴い、Windowsストアアプリを更新しました。変更の 1 つは、 を に置き換えることCheckBoxですToggleSwitch

したがって、コードはから更新されます

<CheckBox IsChecked="{Binding BooleanProperty}" ...

<ToggleSwitch IsOn="{Binding BooleanProperty"} ... //does not update data source

ToggleSwitch次に、トグルしても基になる が更新されないことに気付きました。それを機能させるBooleanPropertyには、追加Mode=TwoWayする必要があります。

<Toggleswitch IsOn="{Binding BooleanProperty, Mode=TwoWay"} ... //update data source

WPFで学んだことからMode=TwoWay、CheckBox の IsChecked プロパティを明示的に設定する必要はありません。これはTwoWayデフォルトであるためです。

一般に、テキスト ボックスやチェック ボックスのプロパティなど、ユーザーが編集可能なコントロールのプロパティは既定で双方向のバインドに設定されますが、他のほとんどのプロパティは既定で一方向のバインドに設定されます。

そして、私はToggleSwitch、より優れたタッチ サポートを備えた単なるチェック ボックスであり、Windows ストアおよび Windows Phone アプリでのみ利用できると考えていました。

ToggleSwitch.IsOnデフォルトが TwoWay バインディングでないのはなぜですか? CheckBox と ToggleSwitch の間に他に違いはありますか?

4

2 に答える 2

3

問題は、Microsoft が "Windows 8" バージョンの WPF を作成したときに、多くの変更を加えたことです。バインディングのデフォルト モードを含め、多くの変更が行われました。

デフォルトは OneWay です。ソースはターゲットを更新しますが、ターゲット値を変更してもソースは更新されません。

( MSDN )

一方、WPF では:

BindingMode 値の 1 つ。デフォルトは Default で、ターゲットの依存関係プロパティのデフォルトのバインディング モード値を返します。ただし、既定値は依存関係プロパティごとに異なります。一般に、テキスト ボックスやチェック ボックスのプロパティなど、ユーザーが編集可能なコントロールのプロパティは既定で双方向のバインドに設定されますが、他のほとんどのプロパティは既定で一方向のバインドに設定されます。

依存関係プロパティが既定で一方向または双方向のどちらにバインドされるかをプログラムで判断する方法は、GetMetadata を使用してプロパティのプロパティ メタデータを取得し、BindsTwoWayByDefault プロパティのブール値を確認することです。

( MSDN )

于 2014-12-15T18:02:18.867 に答える
0

私の経験によると、ToggleSwitch と CheckBox はどちらも 2 つの状態を切り替えるために使用されます。もちろん、ToggleSwitch は Windows ストア アプリと Windows Phone アプリで使用されます。たぶん、ToggleSwich は CheckBox よりも単純な ToggleButton に似ています... もう 1 つの違いは、CheckBox はクリアできますが、ToggleSwitch は常に切り替えられているか切り替えられていないことです。

いずれにしても、バインディングのモードを明示的に設定することをお勧めします。

于 2014-12-13T12:31:17.587 に答える