为什么我会得到不一致的绑定结果
-
05-07-2019 - |
题
我有一个带切换按钮的控件模板。这个ToggleButton的IsChecked属性是绑定到dependance属性的一种方式。如果我明确设置dependancy属性绑定工作。
问题是在之后我与UI中的切换按钮进行交互时,如果我明确设置了依赖项属性,绑定不会更新IsChecked属性。
我确实有一个使用TwoWay绑定的工作,工作正常。我的问题是,它为什么会这样?我错过了什么吗? Silverlight的绑定机制中是否存在错误?
编辑包括SNIPPET:
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;
解决方案
当修改目标属性(在本例中为IsChecked)时,WPF会删除单向绑定。 Silverlight用于在修改IsChecked时保持绑定。如果稍后设置了Paused,则此值也会覆盖IsChecked。
根据你的说法,似乎Silverlight恢复了WPF的行为。那好吧。就个人而言,我考虑将绑定属性修改为bug。如果属性不是同步命令,则可能是更好的解决方案。
其他提示
- 您应该使用TwoWay绑定
- 确保包含Paused属性的对象支持INotifyPropertyChanged。
- 确保Paused的setter触发PropertyChanged事件 醇>
不隶属于 StackOverflow