Привязка данных RichTextBox.Text к строке - PullRequest
6 голосов
/ 19 января 2012

Попытка привязать строку к свойству RichTextBox.Text, чтобы при изменении значения строки это изменение отражалось в RichTextBox.Пока что я неудачен.

string test = "Test";
rtxt_chatLog.DataBindings.Add("Text",test,null);
test = "a";

Это показывает «Test» в rtxt_chatLog, но не «a».

Даже попытался добавить rtxt_chatLog.Refresh ();но это не имеет никакого значения.

Обновление 1: это тоже не работает:

public class Test
{
    public string Property { get; set; }
}

Test t = new Test();
t.Property = "test";
rtxt_chatLog.DataBindings.Add("Text", t, "Property");
t.Property = "a";

Не правильно ли я понимаю привязку данных?

Ответы [ 2 ]

4 голосов
/ 20 января 2012

Класс String не реализует INotifyPropertyChanged, поэтому для источника привязки нет событий , чтобы сообщить RichTextBox, что что-то изменилось.

Попробуйте обновить класс с помощьюINotifyPropertyChanged реализовано:

public class Test : INotifyPropertyChanged {
  public event PropertyChangedEventHandler PropertyChanged;

  private string _PropertyText = string.Empty;

  public string PropertyText {
    get { return _PropertyText; }
    set {
      _PropertyText = value;
      OnPropertyChanged("PropertyText");
    }
  }

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

}

Кроме того, похоже, что DataBinding не нравится имя "Свойство" для имени свойства.Попробуйте изменить его на что-то другое, кроме «Свойство».

rtxt_chatLog.DataBindings.Add("Text", t, "PropertyText");
0 голосов
/ 20 января 2012

Почему бы просто не установить свойство для строковой переменной и всегда обрабатывать строку через свойство? Это проще сделать под сеттером: rtxt_chatLog.Text = test;

РЕДАКТИРОВАТЬ: от ОП: Well, I want to keep a log of messages in a string in one window (behind the scenes) and then, at user's request, pop up another window that will list the contents of the string from the parent form in real time

Если вы хотите выводить содержимое строки только по запросу пользователя, вам ничего не нужно. Просто нужно обработать запрос пользователя и сделать rtxt_chatLog.Text = test под этим событием (возможно, какой-то обработчик событий). Но если вам нужно, чтобы ваш richtextbox заполнялся каждым новым значением для вашей строки, вы можете сделать что-то простое:

public string Test
{
    set
    { 
        test = value; 
        rtxt_chatLog.Text = test;
    }
    get { return test; }
}

Ключевым моментом здесь является использование только свойства out для задания значений переменной test. Например, в вашем коде не делайте

test = "sdf";

У

Test = "sdf";

Simple.

...