C# WPF/08 CommunityToolkit (2)
07.4 ObservableRecipient - 예제4
07.4 ObservableRecipient - 예제4
2025.04.231️⃣ ObservableRecipient 예제4. 시나리오더보기✔️ 1. 동작 시나리오MainWindow 리스트에서 항목을 선택하고상세 보기 버튼을 누르면 DetailWindow 에서 선택한 학생의 상세정보와 함께 실행됩니다.이름과 나이를 수정하고정보 반환 버튼을 누르면수정된 내용이 MainWindow 리스트에 반영됩니다. 2️⃣ 프로젝트 구조더보기📁 프로젝트 구조ProjectName/├── Messages/│ └── StudentSelectedMessage.cs├── Models/│ └── Student.cs├── ViewModels/│ ├── MainViewModel.cs│ └── DetailViewModel.cs│ └── LogViewModel.cs├── Views/│ ├─..
07.2 ObservableRecipient - 예제2
07.2 ObservableRecipient - 예제2
2025.04.231️⃣ ObservableRecipient 예제2. 시나리오더보기✔️ 1. 동작 시나리오MainWindow 리스트에서 항목을 선택하고상세보기 버튼을 누르면DetailWindow 에서 선택한 학생의 상세정보와 함께 실행됩니다. 2️⃣ 프로젝트 구조더보기📁 프로젝트 구조ProjectName/├── Messages/│ └── StudentSelectedMessage.cs├── Models/│ └── Student.cs├── ViewModels/│ ├── MainViewModel.cs│ └── DetailViewModel.cs├── Views/│ ├── MainView.xaml│ └── DetailView.xaml├── App.xaml└── App.xaml.cs3️⃣ Message 구현더..
07.1 ObservableRecipient - 예제1
07.1 ObservableRecipient - 예제1
2025.04.231️⃣ ObservableRecipient 예제1. 시나리오더보기✔️ 1. 시나리오 버튼을 누르면새창이 열림문자열을 입력하고버튼을 누르면 ViewModel 간 메시지를 주고받음MainViewModel이 메시지를 보내고, DetailViewModel이 받음 2️⃣ 프로젝트 구조더보기📁 프로젝트 구조ProjectName/├──📁Messages/│ └── NameChangedMessage.cs├──📁ViewModels/│ ├── MainViewModel.cs│ └── DetailViewModel.cs├──📁Views/│ ├── MainView.xaml│ └── DetailView.xaml├── App.xaml└── App.xaml.cs3️⃣ Message 구현더보기📁 Message..
07. ObservableRecipient - 개요
07. ObservableRecipient - 개요
2025.04.23Recipient = 수신자 → 상태 변경을 감지할 수 있으며, 메시지를 수신할 수 있는 ViewModel 1️⃣ ObservableRecipient 개요 더보기📚 Microsoft Docs: ObservableRecipient ✅ CommunityToolkit.Mvvm Naming Convention(명칭 철학) 클래스명 역할 ObservableObject속성 변경 감지 가능 (기본 ViewModel의 역할)RelayCommandICommand 생성기ObservableValidator유효성 검증 가능한 ViewModelObservableRecipient메시지 수신 기능이 포함된 ViewModel 변화(Observable)를 감지하고 메시지를 받는 객체(수신자, Recipient)ViewModel..
16. INavigationService
16. INavigationService
2025.04.181. INavigationService 개요더보기✔️ INavigationService INavigationService 인터페이스 기반으로 ViewModel 간 탐색이 가능한 구조로 확장INavigationService를 정의하고 NavigationService에서 SubWindow 열기 기능 구현MainViewModel에 INavigationService를 생성자 주입App.xaml.cs에서 IoC 컨테이너에 .AddSingleton() 등록이렇게 하면 ViewModel은 UI(Window)를 직접 알 필요 없이 Navigation 요청만 수행하므로 MVVM 원칙을 더욱 충실히 구현 📁 최종 WPF MVVM 프로젝트 구조WPF_INavigationService01/├── Messages/│ ..
15. Singleton 주입 → DependencyInjection
15. Singleton 주입 → DependencyInjection
2025.04.181. DependencyInjection 개요더보기✔️ Singleton 주입Logger 같은 전역 서비스(Singleton)를 ViewModel에 안전하게 주입하여 사용합니다.MVVM에서 Logger.Instance를 직접 참조하지 않고, 인터페이스 기반으로 느슨한 결합을 유지합니다. ✔️ "Singleton 주입"을, DependencyInjection 기반으로 확장 App.xaml.cs에서 DI 컨테이너를 구성하고,ILoggerService를 싱글톤으로 등록해 MainViewModel, SubViewModel에 자동으로 주입됩니다.App.xaml.cs에서 ServiceCollection을 구성하고 ILoggerService, MainViewModel, SubViewModel을 등록MainWindo..
14. Messenger
14. Messenger
2025.04.181. Singleton 주입 개요더보기✔️ Singleton 주입 사용 목적Logger 같은 전역 서비스(Singleton)를 ViewModel에 안전하게 주입하여 사용합니다.MVVM에서 Logger.Instance를 직접 참조하지 않고, 인터페이스 기반으로 느슨한 결합을 유지합니다. ✔️ + Messenger 추가View 간 메시지 통신이 가능하도록 CommunityToolkit.Mvvm.Messaging을 사용한 구조를 추가합니다.LogUpdateMessage 메시지를 정의하여 MainWindow와 SubWindow 간 로그 내용을 실시간 공유합니다.WeakReferenceMessenger.Default.Send(...)를 통해 로그 변경 시 다른 ViewModel에게 전달합니다.Register로..
13. Singleton 주입
13. Singleton 주입
2025.04.181. Singleton 주입 개요더보기✔️ 사용 목적Logger 같은 전역 서비스(Singleton)를 ViewModel에 안전하게 주입하여 사용합니다.MVVM에서 Logger.Instance를 직접 참조하지 않고, 인터페이스 기반으로 느슨한 결합을 유지합니다. ✔️ 소스코드 2. 예제1 - Window 1개더보기 📁 Services 구현WPF_Singleton04_01MVVM/ ├── Services/ │ ├── ILoggerService.cs │ └── Logger.cs ← Singleton 구현//├── ViewModels///│ └── MainViewModel.cs//├── Views///│ └── MainWindow.xaml//│ └── M..
12. Singleton Pattern
12. Singleton Pattern
2025.04.181. 참고자료더보기✔️ Microsoft Docs: 디자인 패턴: 싱글톤 | Microsoft Learn 2. Singleton Pattern 개요더보기✔️ 핵심 개념클래스의 인스턴스를 오직 1개만 생성하도록 제한정적 메서드(Instance, GetInstance()) 를 통해 접근일반적으로 생성자를 private으로 제한하여 외부에서 직접 생성하지 못하게 함 🟢 장점:자원 낭비 방지 (ex: DB 연결, 설정 로딩 등)전역 상태 유지 (한번 생성된 인스턴스를 재사용)스레드 동기화로 안정성 향상 가능 🔴 단점:전역 상태 → 테스트 어려움의존성 주입(DI)과 충돌할 수 있음멀티스레드 환경에서는 구현 시 주의가 필요 3. Singleton 예제더보기📁 프로젝트 구조SingletonPatter..
11. IServiceProvider - Ioc(제어 반전)
11. IServiceProvider - Ioc(제어 반전)
2025.04.181. 출처 및 참고자료더보기✔️ Microsoft Docs: MVVM Toolkit IoC 관련 네임스페이스:using CommunityToolkit.Mvvm.DependencyInjection; 학습 목표 IoC를 사용한 구조와 사용하지 않은 구조를 단계별 비교한다.Service, ViewModel, App.xaml.cs, MainWindow.xaml을 모두 작성한다.최종적으로 WPF MVVM 프로젝트에서 IoC가 왜 중요한지 체험한다. 2. 기능명: Ioc.Default, IServiceProvider더보기✔️ Inversion of Control (제어의 역전)란?객체의 생성과 관계 설정을 개발자가 직접 하지 않고, IoC 컨테이너가 대신 처리함IoC를 통해, 객체 생성을 프레임워크에 위임하여 의..
03.3 INotifyPropertyChanged
03.3 INotifyPropertyChanged
2025.04.181️⃣ INotifyPropertyChanged더보기 📚 Microsoft Learn / Learn / .NET / MVVM ✅ [INotifyPropertyChanged] 개요 클래스에 INotifyPropertyChanged 인터페이스를 자동 구현하게 해주는 '어트리뷰트' 입니다.INotifyPropertyChanged 인터페이스와 다릅니다. ✅ [INotifyPropertyChanged] 사용 예시[INotifyPropertyChanged]public partial class MyViewModel{ public string Name { get; set; }} ✅ [ObservableProperty] 비교public partial class MyViewModel : ObservableO..
03.2 ObservableValidator
03.2 ObservableValidator
2025.04.181. 출처 및 참고자료더보기✔️ Microsoft Docs: ObservableValidator (공식문서) ObservableValidator는 INotifyDataErrorInfo를 구현하는 MVVM용 ViewModel 베이스 클래스입니다.이 클래스를 상속하고 .ValidateAllProperties() 또는 .ValidateProperty() 메서드를 호출하면, 속성의 데이터 유효성 검사가 자동으로 수행되며, View에서 실시간으로 오류 메시지를 수신할 수 있습니다. 관련 어노테이션: [ObservableProperty], [Required], [MinLength], [MaxLength], [EmailAddress] 등 2. 기능명 or 기능 개요더보기✔️ 작동 방식ObservableObject..