WPF에서 데이터를 표시하는 표준 방법은 컨트롤을 바인딩하는 것입니다 (MSDN의 Data Binding 참조). 이것은 아마도 당신이 메신저 클래스를 랩핑하거나 리팩토링하여 바인딩 가능한 속성을 노출 할 것을 요구할 것입니다.
// 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);
}
메시지를 포함하는 텍스트 상자에 이름을 이름 속성을 사용하여 확인할 수 있습니다 :
<TextBox Name="MyTextBox" />
왜 수업 내에서 텍스트 상자가 필요합니까? 수업은 데이터 처리/결과 만 제공하고 GUI는 datta 및 결과 만 나타냅니다. 예를 들어, 단추 처리기에서 myMessengerClass.SendMessage (textBoxMessage.Text)를 사용합니다. SendMessage 메서드는 메신저 클래스의 텍스트 상자가 필요하지 않은 방식으로받은 텍스트를 처리하는 방법을 알아야하며 해당 텍스트 만 사용해야합니다. – Carlo