1️⃣ 예제 3

더보기

✔️ 1. 동작 시나리오

  1. TextBox에 입력하면
  2. 리스트 박스와, 콘솔에 변경 로그가 찍힙니다.
  3. 로그 필터링(키워드) 기능과
  4. 로그 초기화 기능을 추가합니다.

 


✔️ 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에 로그가 출력됩니다.
  • 로그 초기화 버튼 동작
  • 로그가 키워드를 기반으로 필터링