我有两个文本框,我想保持同步,即两个文本框的内容应该完全相同。如果一个文本框更改其他文本框内容应自动同步,反之亦然。我想使用WPF数据绑定工具来实现它。我有以下代码:
<Window x:Class="WPFLearning.DataBindingTwoWay"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="DataBindingTwoWay" Height="300" Width="300">
<Grid>
<StackPanel>
<TextBox x:Name="firstTextBox" Background="Silver"></TextBox>
<TextBox x:Name="secondTextBox" Background="Gold" ></TextBox>
</StackPanel>
</Grid>
</Window>
我尝试使用Binding Markup Extensions但无法正确使用它。以下是我在firstTextBox上指定Binding的方法:
<TextBox x:Name="firstTextBox" Background="Silver" Text="{Binding Source=secondTextBox, Path=Text, Mode=TwoWay}"></TextBox>
此外,没有运行时错误。我究竟做错了什么?
答案 0 :(得分:10)
如果这是你想要做的,WPF将允许你这样做:
<Grid>
<StackPanel>
<TextBox x:Name="firstTextBox" Background="Silver" Text="{Binding Path=Text, ElementName=secondTextBox, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}"></TextBox>
<TextBox x:Name="secondTextBox" Background="Gold" ></TextBox>
</StackPanel>
</Grid>
ElementName
语法是绑定DataContext
中属性的基本方法的一个非常强大的补充。许多疯狂的事情变得可能。
答案 1 :(得分:1)
您确定要将一个文本框绑定到另一个文本框吗?通过这样做,更改另一个文本框中的文本值不会影响另一个文本值(除非每个文本框绑定到另一个文本框,这听起来像一个荒谬的事情)。
实现此目的的正确方法是将两个文本框(或任意数量的文本框,控件等)绑定到单个属性。此属性存在于数据模型和/或视图模型中。