如果选中复选框,我正尝试将文本从一个文本框发送到另一个文本框。这些字段是在两个不同的XAML文件中创建的。
第一个XAML文件(InvolvedPersonStackPanel)包含复选框和文本框:
如果选中此复选框,则应将涉及的人员文本框中的文本复制到另一个在不同XAML文件中创建的文本框中,如下所示:
在InvolvedPersonStackPanel.xaml.cs文件中,我写了这段代码:
void LivesWithCheckBox_Checked(object sender, RoutedEventArgs e)
{
per.LivesWithTextBox.Text = personTextBox.Text;
}
这不适合我,但我不确定这个问题。也许我应该在其他xaml.cs文件中尝试这个..
答案 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