C# 如果选中此复选框,则将文本从一个字段复制到另一个字段

C# 如果选中此复选框,则将文本从一个字段复制到另一个字段,c#,wpf,xaml,visual-studio-2012,C#,Wpf,Xaml,Visual Studio 2012,如果选中复选框,我将尝试将文本从一个文本框发送到另一个文本框。这些字段是在两个不同的XAML文件中创建的 第一个XAML文件(InvolvedPersonStackPanel)包含复选框和文本框: 如果选中此复选框,则相关人员文本框中的文本应复制到在不同XAML文件中创建的另一个文本框中,如下所示: 在InvolvedPersonStackPanel.xaml.cs文件中,我编写了以下代码: void LivesWithCheckBox_Checked(object sender, Rout

如果选中复选框,我将尝试将文本从一个文本框发送到另一个文本框。这些字段是在两个不同的XAML文件中创建的

第一个XAML文件(InvolvedPersonStackPanel)包含复选框和文本框:

如果选中此复选框,则相关人员文本框中的文本应复制到在不同XAML文件中创建的另一个文本框中,如下所示:

在InvolvedPersonStackPanel.xaml.cs文件中,我编写了以下代码:

void LivesWithCheckBox_Checked(object sender, RoutedEventArgs e)
{
    per.LivesWithTextBox.Text = personTextBox.Text;
}

这对我不起作用,但我不确定这个问题。也许我应该在另一个xaml.cs文件中尝试一下

我建议您使用ViewModel在两个视图之间进行绑定,就像这样。请仔细阅读该模式以了解更多信息

基本上,每个XAML文件都是一个
视图
。然后,您应该确保它们共享与其DataContext相同的
ViewModel实例。如果完成此操作,您可以使用下面的
ViewModel

我强烈建议希望与WPF合作的人尽早学习MVVM

public class MyViewModel : INotifyPropertyChanged
{
    private string _involvedPerson;
    private string _livesWithPerson;
    private bool _livesWith;

    public string InvolvedPerson
    {
        get { return _involvedPerson; }
        set
        {
            _involvedPerson = value;
            OnPropertyChanged("InvolvedPerson");
        }
    }

    public string LivesWithPerson
    {
        get
        {
            if (LivesWith)
            {
                return InvolvedPerson;
            }
            return _livesWithPerson;
        }
        set
        {
            if (LivesWith)
            {
                InvolvedPerson = value;
            }
            else
            {
                _livesWithPerson = value;
            }
            OnPropertyChanged("LivesWithPerson");
        }
    }
    public bool LivesWith
    {
        get { return _livesWith; }
        set
        {
            _livesWith = value;
            if (_livesWith)
            {
                LivesWithPerson = null;
            }
            OnPropertyChanged("LivesWith");
        }
    }

    private void OnPropertyChanged(string propertyName)
    {
        if (PropertyChanged != null)
        {
            PropertyChanged(this, new PropertyChangedEventArgs(propertyName));
        }
    }

    public event PropertyChangedEventHandler PropertyChanged;
}
请注意,也可以让选中的事件更改LivesWith文本框上的绑定以指向InvolvedPerson属性。但就我个人而言,我更喜欢在ViewModel中使用这样的逻辑,在ViewModel中可以通过单元测试轻松地进行测试

这是我的答案,先生,你的逻辑是正确的,但你需要这个:

C#WPF

设计:

2文本框 1复选框

//你先前的回答

    private void YourCheckBox_Checked(object sender, RoutedEventArgs e)
    {
        txtOutput.Text = txtInput.Text;
    }
//------你错过了这个!!!!你需要加上这个

    private void txtInput.Text_TextChanged(object sender, TextChangedEventArgs e)
    {
        if (YourCheckBox.IsChecked == true) { txtOutput.Text = txtInput.Text; }
    }
//最后,这里看起来像:

    private void YourCheckBox_Checked(object sender, RoutedEventArgs e)
    {
        txtOutput.Text = txtInput.Text;
    }

    private void txtInput.Text_TextChanged(object sender, TextChangedEventArgs e)
    {

        if (YourCheckBox.IsChecked == true) { txtOutput.Text = txtInput.Text; }
    }
//我希望它能起作用:D


如果有人在选中复选框后更改了相关人员,会发生什么情况。它们应该同步吗?是否可以在不更改相关人员的情况下更改LivesWithTextBox文本?是的,只要选中该复选框,它们应该是同步的。请帮助我。这看起来正是OP发给我的。只是为了避免让其他人感到困惑。我现在还根据OPs对我问题的回答编辑了我的答案。这对同一表单中的两个字段有效,但在将输入从一个表单转移到另一个表单时无效。。