C# socket 통신

ViewModel에서 System.ComponentModel.INotifyPropertyChanged를 구현하고 속성이 변경되었음을 Notify 해야합니다.

class MainViewModel : INotifyPropertyChanged
{
	private string _message;
	public string Message
	{
		get => _message;
		set { _message = value; OnPropertyChanged(); }
	}

	public MainViewModel()
	{
		// 기타 생략
		SendMessageCommand = new RelayCommand(Send, o => !string.IsNullOrEmpty(Message));
	}

	public event PropertyChangedEventHandler? PropertyChanged;

	private void Send(object o)
	{
		if (string.IsNullOrEmpty(Message))
		{
			return;
		}
		_server.SendMessageToServer(Message);
		Message = string.Empty;
	}

	private void OnPropertyChanged([CallerMemberName] string? propertyName = null)
	{
		PropertyChanged?.Invoke(this, new(propertyName));
	}
}

이렇게 Message의 Setter로 값이 변경될 때마다 OnPropertyChanged 메소드를 통해 PropertyChanged 이벤트를 발생시키면 해당 속성에 바인딩된 View에서 값 변경을 감지하고 변경값을 반영하게 됩니다.

참고로 ViewModel에서 INotifyPropertyChanged 구현이 안 되어 있는 경우 WPF의 바인딩 구조상 Memory leak을 유발하기 때문에 필수적으로 구현하셔야 합니다.
참고 링크: .NET Framework: 945. C# - 닷넷 응용 프로그램에서 메모리 누수가 발생할 수 있는 패턴

3개의 좋아요