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# - 닷넷 응용 프로그램에서 메모리 누수가 발생할 수 있는 패턴