同时向两个文本框写入内容

3

在我的WPF应用程序中,我有两个文本框,我正在寻找以下内容:

如果用户在textbox1上输入了内容,我希望应用程序能将相同的值放入textbox2中。

<TextBox x:Name="textbox1"/>
<TextBox x:Name="textbox2"/>

有没有一种优雅的方法来做到这一点?

如果textbox2允许输入,那么您需要更具体地说明您的规则。例如,如果textbox2已经包含了一些用户输入文本,那么应该发生什么? - musefan
我只是想让我的问题更简单明了,我真正需要的是,如果用户在文本框1中输入一些内容,那么文本框2将填入相同的内容,并且如果用户在文本框2中输入一些内容,则会填充文本框1(覆盖旧数据)。 - user9859342
@IOException 看看我的回答是否有帮助到您。它已经经过测试并且在您演示的简单情况下可以正常工作 - 如果在您的实际使用情况中无法正常工作,请随时提供更多信息,我将帮助您实现您想要的目标。 - Thomas Flinkow
1
@IOException:不要把问题简单化。如果您不包括您的真实需求,那么您将得不到您寻找的答案。 - musefan
2个回答

9
以下方法可行:
<TextBox x:Name="textbox1" />
<TextBox x:Name="textbox2" Text="{Binding ElementName=textbox1, Path=Text}"/>

现在这个功能是将 textbox2Text 属性与 textbox1Text 属性绑定。无论您在textbox1 中进行的更改,都会自动反映在textbox2 中。
<TextBox x:Name="textbox1" Text="{Binding TheText, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}" />
<TextBox x:Name="textbox2" Text="{Binding TheText, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}" />

并添加以下C#类:

public class MySimpleViewModel : INotifyPropertyChanged
{
    private string theString = String.Empty;

    public string TheString
    {
        get => this.theString;
        set
        {
            if(this.theString != value)
            {
                this.RaisePropertyChanged();
                this.theString = value;
            }
        }
    }
        
    public event PropertyChangedEventHandler PropertyChanged;

    public virtual void RaisePropertyChanged([CallerMemberName] string propertyName = null)
    {
        this.PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName));
    }
}

我没有展示如何将MySimpleViewModel与实际视图连接起来。但是,如果你有问题,我当然可以展示一下。
希望这对你有所帮助。

它只有在我点击文本框2内部后才起作用,是否有可能使其在不将鼠标放入文本框的情况下更新? - user9859342
@IOException 给我一秒钟,我正在开发一个更新版本,考虑到您的实际需求。 - Thomas Flinkow
@ThomasFlinkow,你能告诉我 [CanBeNull] 是什么吗? - tabby
1
@tabby 这是一个 ReSharper 注释,它有助于静态分析。这不是代码编译或其他任何东西所必需的,只是我在发布之前忘记删除我的 IDE 中剩余的注释。 - Thomas Flinkow

1

另一个选择:

这也可以实现同样的功能

简单的方式:C#

  private void textBox1_TextChanged(object sender, TextChangedEventArgs e)
    {
        textBox2.Text = textBox1.Text;
    }

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接