WPF でデータを表示する標準的な方法は、コントロールをそれにバインドすることです ( MSDN のデータ バインディングを参照してください)。これにはおそらく、メッセンジャー クラスをラップまたはリファクタリングして、バインド可能なプロパティを公開する必要があります。たとえば、メッセンジャー クラスは、メッセージを受信するたびに更新する 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 を実装する必要があることに注意してください。また、ユーザーが TextBox を編集した場合に MessageText プロパティが台無しにならないように、OneWay バインディングにも注意してください。(ユーザーがまったく編集できないように、TextBlock を使用することもできます。)
この設定が完了すると、WPF は _myMessenger.MessageText プロパティの変更を自動的に監視し、発生したときに (つまり、メッセージを受信すると) TextBox.Text を更新します。
最後に、送信方法について: テキストを渡すだけです:
private void SendButton_Click(...)
{
_myMessenger.Send(MyTextBox.Text);
}
Name 属性を使用して、送信するメッセージを含むテキスト ボックスに名前を付けます。
<TextBox Name="MyTextBox" />