Канонический путь в WPF для отображения данных заключается в привязке к нему элемента управления (см. Data Binding в MSDN). Это, вероятно, потребует, чтобы вы обменивали или рефакторировали свой класс мессенджера, чтобы он предоставлял свойства bindable. Например, ваш класс мессенджер может выставить свойство MessageText, который вы обновляете каждый раз, когда вы получаете сообщение:
// INotifyPropertyChanged interface implementation and plumbing
public event PropertyChangedEventHandler PropertyChanged;
protected virtual void OnPropertyChanged(string propertyName)
{
if (PropertyChanged != null)
PropertyChanged(this, new PropertyChangedEventArgs(propertyName);
}
// The property you are going to bind to
private string _messageText = String.Empty;
public string MessageText
{
get { return _messageText; }
set
{
_messageText = value;
OnPropertyChanged("MessageText");
}
}
// How to modify your code to update the bindable property
private void OnMessageReceive(string message) // assuming this method already exists
{
MessageText = MessageText + Environment.NewLine + message;
}
Теперь вы бы связать свойство TextBox.Text к этому новому свойству:
<TextBox Text="{Binding MessageText, Mode=OneWay}" />
Предполагается, что объект мессенджера задан как DataContext окна, например когда окно создает посланному:
public class Window1()
{
_myMessenger = = new DanMessengerClient();
this.DataContext = _myMessenger;
}
Примечание ваш класс мессенджер должен реализовать INotifyPropertyChanged для этой работы. Также обратите внимание на привязку OneWay, чтобы, если пользователь редактирует TextBox, он не сбрасывает свойство MessageText. (Вы также можете использовать TextBlock, чтобы пользователь не мог редактировать его вообще.)
Когда вы настроите эту настройку, WPF автоматически проверит изменения в свойстве _myMessenger.MessageText и обновит TextBox.Text по мере их возникновения (т. Е. При получении сообщений).
Наконец, о том, как сделать посыла: просто передать текст:
private void SendButton_Click(...)
{
_myMessenger.Send(MyTextBox.Text);
}
Используйте атрибут Имя назвать текстовое поле, содержащее сообщение, которое будет отправлено:
<TextBox Name="MyTextBox" />
Зачем вам текстовое поле внутри вашего класса? Ваш класс должен работать только для обработки данных/предоставления результатов, GUI только для представления датты и результата. Например, в вашем обработчике кнопок вы должны выполнить myMessengerClass.SendMessage (textBoxMessage.Text). Ваш метод SendMessage должен знать, что делать с полученным текстом, поэтому вам не нужно текстовое поле в вашем классе Messenger, а только его текст. – Carlo