2

我有一个带有切换按钮的控制模板。此 ToggleButton 的 IsChecked 属性以一种方式绑定到依赖属性。如果我明确设置依赖属性,则绑定有效。

问题是,我与 UI 中的切换按钮交互后,如果我明确设置依赖属性,绑定不会更新 IsChecked 属性。

我确实有一个使用 TwoWay 绑定的工作区,效果很好。我的问题是,为什么它会这样?我错过了什么吗?Silverlight的绑定机制有bug吗?

编辑包括片段:

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

当目标属性(在本例中为 IsChecked)被修改时,WPF 会删除一种方式绑定。Silverlight 用于在 IsChecked 被修改时保留绑定。如果稍后设置了 Paused,则该值也将覆盖 IsChecked。

根据您的说法,Silverlight 似乎恢复为 WPF 行为。那好吧。就个人而言,我认为修改绑定属性是一个错误。如果属性不打算同步,则命令可能是更好的解决方案。

于 2009-09-14T23:32:36.470 回答
1
  1. 您应该使用双向绑定
  2. 确保包含 Paused 属性的对象支持 INotifyPropertyChanged。
  3. 确保 Paused 的设置器触发 PropertyChanged 事件
于 2009-09-13T19:40:25.273 回答