代码之家  ›  专栏  ›  技术社区  ›  Gishu

为什么数据绑定会在单向模式下中断?

  •  8
  • Gishu  · 技术社区  · 15 年前

    这是一个小的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.停止工作。

    如果我移除 Mode=OneWay set directive(默认为双向)一切工作正常。

    为什么会这样?

    2 回复  |  直到 12 年前
        1
  •  12
  •   Barry Kaye    12 年前

    使用 mode=TwoWay 并设置 UpdateSourceTrigger=Explicit .

        2
  •  3
  •   Alex Janzik    15 年前

    数据绑定未断开,但已停用( 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>