2014-09-19 4 views
0

Я пытаюсь отправить текст из одного текстового поля в другое, если установлен флажок. Поля были созданы в двух разных файлах 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.

+0

Что произойдет, если кто-то изменяет проверяющее лицо после проверки CheckBox. Должны ли они синхронизироваться? Должно ли быть возможно изменить текст LivesWithTextBox без изменения InvolvedPerson? –

+0

Да, если этот флажок установлен, они должны быть синхронизированы. –

ответ

1

Я бы предложил вам использовать ViewModel для привязки между двумя представлениями, как это. Для получения дополнительной информации ознакомьтесь с рисунком MVVM.

В принципе, каждый из ваших файлов XAML будет View. Затем вы должны убедиться, что они используют один и тот же экземпляр ViewModel в качестве своего DataContext. Если это будет сделано, вы можете использовать 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

Помогите мне. Это похоже на то, что OP опубликовал для меня. – Paparazzi

+0

И просто чтобы не смущать кого-либо еще. Теперь я также отредактировал свой ответ на основе ответа OPs на мой вопрос. –

+0

Пожалуйста, объясните, что такое downvote? –

0

Heres мой ответ, сэр, ваша логика является правильным, но вам это нужно:

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

+0

Это работает в двух полях из той же формы, но не работает при передаче ввода из одной формы в другую. –

Смежные вопросы