2.1.5 예제 - 3단계
1️⃣ 예제 3
더보기



✔️ 1. 동작 시나리오

- TextBox에 입력하면
- 리스트 박스와, 콘솔에 변경 로그가 찍힙니다.
- 로그 필터링(키워드) 기능과
- 로그 초기화 기능을 추가합니다.
✔️ 2. [ObservableProperty] 사용 예제
📁 2.1 MainViewModel.cs 수정

// 로그 출력을 위한 컬렉션 추가
public ObservableCollection<string> Logs { get; } = new();
// 필터링된 로그 보기
public ICollectionView FilteredLogs { get; }
public MainViewModel()
{
// 필터링 뷰 구성
FilteredLogs = CollectionViewSource.GetDefaultView(Logs);
FilteredLogs.Filter = FilterLogs;
}
// 필터 문자열
[ObservableProperty]
private string? logFilter;
partial void OnLogFilterChanged(string? value)
{
FilteredLogs.Refresh();
}
private bool FilterLogs(object item)
{
if (string.IsNullOrWhiteSpace(LogFilter))
return true;
return item is string log && log.Contains(LogFilter, StringComparison.OrdinalIgnoreCase);
}
// 로그 초기화 명령
[RelayCommand]
private void ClearLogs()
{
Logs.Clear();
}
📁 2.2 XAML 화면 수정

<!-- 로그 사용 부분 수정 -->
<TextBlock Text="로그:" Margin="0" FontWeight="Bold"/>
<!-- 로그 필터 입력 -->
<TextBox Text="{Binding LogFilter, UpdateSourceTrigger=PropertyChanged}"
Margin="0" />
<!-- 로그 출력 영역 -->
<ListBox ItemsSource="{Binding Logs}" Height="50" />
<!-- 로그 초기화 버튼 -->
<Button Content="로그 초기화" Command="{Binding ClearLogsCommand}"
Margin="0,5,0,0"/>
📁 2.3 결과
- 텍스트 박스에 입력 → 콘솔에 OnNameChanging과 OnNameChanged의 구현부 로그 출력
실제로 속성 변경 시점에 실행되는지 학생들이 눈으로 확인 - 기존 콘솔에 출력되던 로그 외, UI에 로그가 출력됩니다.
- 로그 초기화 버튼 동작
- 로그가 키워드를 기반으로 필터링