为什么我会得到不一致的绑定结果

时间:2009-09-11 14:33:11

标签: silverlight data-binding controltemplate

我有一个带切换按钮的控件模板。这个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;

2 个答案:

答案 0 :(得分:2)

当修改目标属性(在本例中为IsChecked)时,WPF会删除单向绑定。 Silverlight用于在修改IsChecked时保持绑定。如果稍后设置了Paused,则此值也会覆盖IsChecked。

根据你的说法,似乎Silverlight恢复了WPF的行为。那好吧。就个人而言,我考虑将绑定属性修改为bug。如果属性不是同步命令,则可能是更好的解决方案。

答案 1 :(得分:1)

  1. 您应该使用TwoWay绑定
  2. 确保包含Paused属性的对象支持INotifyPropertyChanged。
  3. 确保Paused的setter触发PropertyChanged事件