2

トグルボタン付きのコントロールテンプレートがあります。このToggleButtonには、依存関係プロパティにバインドされた一方向のIsCheckedプロパティがあります。依存関係プロパティを明示的に設定すると、バインディングが機能します。

問題は、UIのトグルボタンを操作した、依存関係プロパティを明示的に設定した場合、バインディングがIsCheckedプロパティを更新しないことです。

正常に機能するTwoWayバインディングを使用した回避策があります。私の質問は、なぜそれがこのように動作するのですか?私は何かが足りないのですか?Silverlightのバインディングメカニズムにバグはありますか?

スニペットを含めるための編集:

ControlTemplateのバインディングは次のようになります(TemplateBindingに置き換えることができます)

<ToggleButton x:Name="PlayPause" Grid.Column="0" 
              IsChecked="{Binding Paused, Mode=OneWay, RelativeSource={RelativeSource TemplatedParent}}"
              HorizontalAlignment="Center"
              Width="50" Height="50"/>

依存関係プロパティの明示的な設定は、かなり独創的な標準です。

myComponent.Paused = true;
4

2 に答える 2

2

WPFは、ターゲットプロパティ(この場合はIsChecked)が変更されると、一方向のバインディングを削除します。IsCheckedが変更されたときにバインディングを保持するために使用されるSilverlight。後でPausedが設定された場合、この値はIsCheckedも上書きします。

あなたによると、SilverlightはWPFの動作に戻ったようです。しかたがない。個人的には、バインドされたプロパティを変更することはバグだと思います。プロパティが同期することを意図していない場合は、コマンドがより良い解決策になる可能性があります。

于 2009-09-14T23:32:36.470 に答える
1
  1. TwoWayバインディングを使用する必要があります
  2. Pausedプロパティを含むオブジェクトがINotifyPropertyChangedをサポートしていることを確認してください。
  3. PausedのセッターがPropertyChangedイベントをトリガーすることを確認してください
于 2009-09-13T19:40:25.273 に答える