2

我在一些示例中看到了数据绑定,并且我理解了其中的一部分,但我无法弄清楚何时使用 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"/>
4

2 回答 2

2

来自MSDN

  • 每当目标属性或源属性发生更改时,TwoWay 都会更新目标属性或属性。

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

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

  • 当目标属性更改时,OneWayToSource 会更新源属性。Default 导致使用目标属性的默认 Mode 值。

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

于 2013-07-25T01:31:43.980 回答
1

数据绑定基本上只是一种自动方式,使来自两个属性(通常来自不同对象)的两个值同步,因此当一个发生变化时,另一侧也会发生变化。在 WPF 绑定中,有一个source,数据来自哪里(通常是表单的数据上下文,但也可以通过ElementNameSource或指定RelativeSource)和target、设置的属性以及Binding用 XAML 编写的属性(或通过代码设置) )。

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

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

在每种情况下选择使用哪个是非常具体的特定需求。需要考虑的重要一点是,如果你改变了一侧,会发生什么改变会传播到另一侧?

例如,如果将Texta绑定TextBox到代码中的属性,通常您会想要使用TwoWay,因为当用户键入时您希望更新数据,并且当您以编程方式更改数据时,您希望显示也更新。但是如果你绑定 a TextBlock,OneWay就足够了,因为用户不能在那里写,也不需要传播任何东西。

于 2013-07-25T01:48:27.823 回答