C# 如果选中此复选框,则将文本从一个字段复制到另一个字段
如果选中复选框,我将尝试将文本从一个文本框发送到另一个文本框。这些字段是在两个不同的XAML文件中创建的 第一个XAML文件(InvolvedPersonStackPanel)包含复选框和文本框: 如果选中此复选框,则相关人员文本框中的文本应复制到在不同XAML文件中创建的另一个文本框中,如下所示: 在InvolvedPersonStackPanel.xaml.cs文件中,我编写了以下代码: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
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对我问题的回答编辑了我的答案。这对同一表单中的两个字段有效,但在将输入从一个表单转移到另一个表单时无效。。