为什么数据绑定在OneWay模式下中断?

时间:2009-09-07 11:57:24

标签: wpf data-binding binding-mode

这是一个小小的XAML片段。你会看到

<StackPanel>
     <TextBox x:Name="txtValue">250</TextBox>
     <Slider x:Name="slide" 
             Value="{Binding ElementName=txtValue, Path=Text, 
                             Mode=OneWay, UpdateSourceTrigger=PropertyChanged}" 
            Minimum="0" Maximum="500"></Slider>
</StackPanel>
  1. 更改文本框值时,滑块会更新
  2. 如果明确更改滑块值,则先前的行为会破坏a.k.a.停止工作。
  3. 如果删除Mode=OneWay set指令(默认为双向),一切都会完美无缺。

    为什么会这样?

2 个答案:

答案 0 :(得分:12)

使用mode=TwoWay并设置UpdateSourceTrigger=Explicit

答案 1 :(得分:3)

您的数据绑定未中断但已取消激活(http://en.wikipedia.org/wiki/Euphemism):

System.Windows.Data Warning: 75 : BindingExpression (hash=52697953): Deactivate
System.Windows.Data Warning: 99 : BindingExpression (hash=52697953): Replace item at level 0 with {NullDataItem}
System.Windows.Data Warning: 59 : BindingExpression (hash=52697953): Detach

将跟踪级别设置为高将在VS输出窗口中生成此消息,以防您移动滑块:

<Slider xmlns:trace="clr-namespace:System.Diagnostics;assembly=WindowsBase"
        Value="{Binding trace:PresentationTraceSources.TraceLevel=High,
            ElementName=txtValue, Path=Text, Mode=OneWay,
            UpdateSourceTrigger=PropertyChanged}"
        Minimum="0" Maximum="500"></Slider>