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

时间:2014-09-19 22:17:26

标签: c# wpf xaml visual-studio-2012

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

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

enter image description here

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

enter image description here

在InvolvedPersonStackPanel.xaml.cs文件中,我写了这段代码:

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

这不适合我,但我不确定这个问题。也许我应该在其他xaml.cs文件中尝试这个..

2 个答案:

答案 0 :(得分:1)

我建议你使用ViewModel来绑定两个这样的视图。阅读MVVM模式以获取更多信息。

基本上,每个XAML文件都是View。然后,您应该确保它们与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 TextBox上的绑定,以指向InvolvedPerson属性。但就个人而言,我更喜欢在ViewModel中使用这样的逻辑,它可以通过单元测试轻松测试。

答案 1 :(得分:0)

  

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

     

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