假设我想数据绑定两个TextBox。我可以在XAML中完成:
<TextBox x:Name="FirstBox" Text="{Binding Text, Mode=TwoWay, ElementName= SecondBox}"></TextBox>
<TextBox x:Name="SecondBox"></TextBox>
或者,我可以通过编程方式完成。
Binding binding = new Binding("Text");
binding.Mode = BindingMode.TwoWay;
binding.Source = SecondBox;
FirstBox.SetBinding(TextBox.TextProperty, binding);
问题是,当我在SecondBox中输入内容时,它会立即反映在FirstBox中。但是,在FirstBox中输入不会立即显示在SecondBox中。只有在关注FirstBox时才更新SecondBox。
当然,我可以为SecondBox构建另一个Binding。但是,有没有其他方法可以在FirstBox中立即更新SecondBox?
答案 0 :(得分:3)
可能还有其他方法包含代码块,但如果这是你真正要求的话,我就不会想到更容易的方法。你为什么不在SecondBox上使用另一个绑定来观察第一个(我假设这是一个场景的简化,其中任何一个实际上都有意义)?
答案 1 :(得分:2)
您可以通过一些代码实现此目的。 Xaml看起来像这样:
<TextBox x:Name="tb1" Text="{Binding Path=Text, ElementName=tb2, Mode=TwoWay, UpdateSourceTrigger=Explicit}" TextChanged="tb1_TextChanged" />
<TextBox x:Name="tb2" />
除了我们设置“UpdateSourceTrigger = Explicit”并且我们正在注册TextChanged事件之外,这与您拥有的相同。默认情况下,当TextBox失去焦点时,TextBox.Text上的绑定会更新。通过设置“UpdateSourceTrigger = Explicit”,我们将覆盖默认的更新行为,我们需要明确说明何时更新绑定。所以我们有TextChanged事件处理程序,如下所示:
private void tb1_TextChanged(object sender, TextChangedEventArgs e)
{
tb1.GetBindingExpression(TextBox.TextProperty).UpdateSource();
}
答案 2 :(得分:1)
我认为这是TextBox的预期行为。来自http://msdn.microsoft.com/en-us/library/cc278072(VS.95).aspx
更新数据源 在TwoWay绑定中,对目标的更改会自动更新源,除非绑定到TextBox的Text属性。在这种情况下,当TextBox失去焦点时发生更新。
我认为您还需要绑定第二个TextBox上的Text属性,以获得您想要的行为,如Anthony建议的那样。