[ObservableProperty] 어트리뷰트 활용
보통은 아래 코드처럼
CommunityToolkit.Mvvm을 통해 속성 자체를 생략하여 편리하게 사용하지만
[ObservableProperty]
private _title { get; set; }
INotifyPropertyChanged 를 직접 구현해보고
이해하는것은 MVVM을 이해하는대에 큰 도움이 된다
위 코드가 나오기까지 어떠한 과정들이 생략 되었는지 알아보자
INotifyPropertyChanged 구현
MVVM 패턴의 실체와도 같은 INotifyPropertyChanged를 통해 바인딩 가능한 속성을 만들게 된다
또한 WindowsBase.dll에 포함된 이 상징적인 인터페이스를 한번 들여다 볼 필요가 있다생각보다 많은 WPF 개발자들이 이를 직접 구현하여 사용하기도 한다
나또한 MVVM을 처음 접했을때 라이브러리를 사용하지않고,직접 구현하여 사용하였는데이번 세미나에서 INotifyPropertyChanged 구현에 관련된 내용이 나와 반가웠다
public class MainWindowViewmodel : INotifyPropertyChanged
{
public event PropertyChangedEventHandler PropertyChanged;
protected virtual void OnPropertyChanged(string propertyName)
{
PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName));
}
}
이 인터페이스는 OnPropertyChanged 메서드를 인터페이스 멤버로 구현하도록 한다
그리고 Setter를 통해 속성의 변화를 뷰에서 감지하도록 알리는 로직을 구현할 수 있게 된다
private string _title;
public string Title
{
get
{
return _title;
}
set
{
_title = value; OnPropertyChanged("Title");
}
}
이방식은 아주 클래식한 문법이다
Title 속성의 이름을 문자열로 직접 입력하여 보내게 된다
하지만 이 방식은 속성의 이름이 변경되었을 때도 싱크를 함께 맞추어야 하며
오타를 범할 수 도 있게 된다
nameof 활용
더 좋은방법은 nameof를 활용하는것이다
set
{
_title = value; OnPropertyChanged(nameof(Title));
}
이렇게 되면 속성 이름의 오타를 범하는 실수를 방지하고
속성 이름 변경에 따른 추가 작업을 줄일 수 있다
internal class MainWindowViewmodel : INotifyPropertyChanged
{
private string _title = string.Empty;
public string Title
{
get { return _title; }
set { _title = value; OnPropertyChanged(nameof(Title)); }
}
public event PropertyChangedEventHandler PropertyChanged;
protected virtual void OnPropertyChanged(string propertyName)
{
PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName));
}
}
'c# > 세미나' 카테고리의 다른 글
| [세미나] Blazor / WPF / MAUI 밋업 (0) | 2024.04.11 |
|---|---|
| [세미나] Blazor / WPF / MAUI 밋업 (멀티 타겟팅 라이브러리) (0) | 2024.04.03 |
| [세미나] Blazor / WPF / MAUI 밋업 (닷넷 버전선택) (0) | 2024.04.03 |
| [세미나] Blazor / WPF / MAUI 밋업 (Application, Current, MainWindow, GetWindow) (0) | 2024.04.03 |
| [세미나] Blazor / WPF / MAUI 밋업 (WPF 구성 요소) (0) | 2024.04.03 |