2009-09-07 56 views
8

這是一個小小的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. 如果你明確地改變滑塊值,以前的行爲打破了工作又稱爲停止。

如果我刪除Mode=OneWay設置指令(默認爲雙向),那麼一切正常。

這是怎麼發生的?

回答

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> 
+5

它爲什麼分離?如果在綁定控件上執行諸如移動拇指之類的操作,則可能會失去單向綁定的目的,或者取消綁定。通過破碎,我的意思是預期的行爲不再被看到。 – Gishu 2009-09-09 04:48:05

+0

這就是它的實現方式:-( 如果它不符合您的需求,請不要使用WPF數據綁定。 – 2009-09-09 07:18:06

12

使用mode=TwoWay並設置UpdateSourceTrigger=Explicit

+7

這可行......但不解釋任何原因。 – Beska 2010-09-01 18:45:26

相關問題