【问题标题】:Why do I get Inconsistent Binding results为什么我得到不一致的绑定结果
【发布时间】:2009-09-11 14:33:10
【问题描述】:

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

【问题讨论】:

  • 如果您可以发布一个小代码示例来演示该问题,这将有所帮助。

标签: silverlight data-binding controltemplate


【解决方案1】:

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

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

【讨论】:

    【解决方案2】:
    1. 您应该使用双向绑定
    2. 确保包含 Paused 属性的对象支持 INotifyPropertyChanged。
    3. 确保 Paused 的设置器触发 PropertyChanged 事件

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-10-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多