我有一个带有切换按钮的控件模板。此 ToggleButton 的 IsChecked 属性以一种方式绑定(bind)到依赖属性。如果我显式设置依赖属性,则绑定(bind)有效。
问题是,在我与 UI 中的切换按钮交互后,如果我显式设置依赖属性,则绑定(bind)不会更新 IsChecked 属性。
我确实有一个使用 TwoWay 绑定(bind)的工作方案,效果很好。我的问题是,为什么它会这样?我错过了什么吗? Silverlight的绑定(bind)机制是否有bug?
编辑以包含片段:
ControlTemplate 中的绑定(bind)看起来类似于(可以用 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;
最佳答案
当目标属性(本例中为 IsChecked)被修改时,WPF 会删除单向绑定(bind)。 Silverlight 用于在 IsChecked 被修改时保留绑定(bind)。如果稍后设置 Paused,该值也会覆盖 IsChecked。
根据您的说法,Silverlight 似乎恢复了 WPF 行为。那好吧。就我个人而言,我认为修改绑定(bind)属性是一个错误。如果属性不应该同步,命令可能是更好的解决方案。
关于silverlight - 为什么我得到不一致的绑定(bind)结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1411265/