代码之家  ›  专栏  ›  技术社区  ›  James Hay

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

  •  2
  • James Hay  · 技术社区  · 15 年前

    我有一个带有切换按钮的控件模板。此ToggleButton的IsChecked属性单向绑定到Dependency属性。如果我显式地设置Dependency属性,绑定将起作用。

    问题是 之后 我与用户界面中的切换按钮交互,如果显式设置依赖属性,绑定不会更新ischecked属性。

    我确实有一个使用双汇装订的作品,效果很好。我的问题是,为什么会这样?我错过什么了吗?Silverlight的绑定机制中是否存在错误?

    编辑以包含代码段:

    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 回复  |  直到 15 年前
        1
  •  2
  •   Bruno Martinez    15 年前

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

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

        2
  •  1
  •   Michael S. Scherotter    15 年前
    1. 你应该用双面装订
    2. 确保包含已暂停属性的对象支持InotifyPropertyChanged。
    3. 确保paused的setter触发propertyChanged事件