保持两个文本框在WPF中同步

时间:2011-05-09 04:29:27

标签: wpf binding

我有两个文本框,我想保持同步,即两个文本框的内容应该完全相同。如果一个文本框更改其他文本框内容应自动同步,反之亦然。我想使用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>

此外,没有运行时错误。我究竟做错了什么?

2 个答案:

答案 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)

您确定要将一个文本框绑定到另一个文本框吗?通过这样做,更改另一个文本框中的文本值不会影响另一个文本值(除非每个文本框绑定到另一个文本框,这听起来像一个荒谬的事情)。

实现此目的的正确方法是将两个文本框(或任意数量的文本框,控件等)绑定到单个属性。此属性存在于数据模型和/或视图模型中。