WPF 中显示数据的规范方法是将控件绑定到它(请参阅MSDN 中的数据绑定)。这可能需要您包装或重构您的 messenger 类,以便它公开可绑定的属性。例如,您的 messenger 类可能会公开一个名为 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}" />
这假设 messenger 对象被设置为窗口的 DataContext,例如当窗口创建 messenger 时:
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);
}
使用 Name 属性来命名包含要发送的消息的文本框:
<TextBox Name="MyTextBox" />