如何使用数据绑定?

时间:2013-07-25 01:26:54

标签: c# visual-studio-2010 windows-phone-7 windows-phone-8

我在一些例子中看过数据绑定,我理解它的一部分,我无法弄清楚的是何时使用mode = twoway和mode = oneway?

<TextBlock x:Name="Item" Text="{Binding Path=Name, Mode=OneWay}" Grid.Column="0" HorizontalAlignment="Left" VerticalAlignment="Center" />
<TextBox x:Name="Count" Text="{Binding Path=Count, Mode=TwoWay}" Grid.Column="1" TextAlignment="Center" InputScope="Number"/>

2 个答案:

答案 0 :(得分:2)

来自MSDN

  
      
  • 只要目标属性或源属性发生更改,TwoWay就会更新目标属性或属性。

  •   
  • OneWay仅在源属性更改时更新目标属性。

  •   
  • OneTime仅在应用程序启动或DataContext发生更改时更新目标属性。

  •   
  • OneWayToSource在目标属性更改时更新source属性。   默认值会导致使用目标属性的默认模式值。

  •   

当您希望更改在源和目标(ViewModel和View)之间来回传播时使用TwoWay,并在不希望目标中的更改更新源时使用OneWay。

答案 1 :(得分:1)

数据绑定基本上只是一种自动方式,可以使两个属性(通常来自不同对象)的两个值同步,这样当一个值发生变化时,另一个变化。在WPF中,绑定有一个,其中数据来自(通常是表单的datacontext,但也可以由ElementNameSourceRelativeSource指定)和目标,设置的属性以及在XAML中写入Binding的位置(或由代码设置)。

Mode属性只是设置哪一方改变另一方。

  • TwoWay双方互相更新。
  • OneWay源会更新目标,但目标中的更改不会影响源。
  • OneWayToSource正好相反,目标更新了源,但更改源不会修改目标。
  • OneTime这些值只复制一次,通常是在设置了datacontext时,然后不再更新。

在每种情况下使用哪种选择非常特定于特定需要。需要考虑的重要一点是,如果改变一方会发生什么,那么改变会传播给另一方吗?

例如,如果将Text的{​​{1}}绑定到代码中的属性,通常您会想要使用TextBox,因为当用户输入您想要的数据时更新,当您以编程方式更改数据时,您希望显示也更新。但是如果你绑定TwoWayTextBlock就足够了,因为用户无法在那里写,也没有必要传播任何内容。