All Pages
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..
03.1 ObservableObject
03.1 ObservableObject
2025.04.181️⃣ ObservableProperty 개요더보기 📚 Microsoft Docs: Microsoft CommunityToolkit MVVM - ObservableObject ✅ ObservableProperty 개요ObservableObject는 MVVM Toolkit에서 제공하는 MVVM의 핵심 클래스입니다.ObservableObject는 INotifyPropertyChanged, INotifyPropertyChanging 인터페이스가 구현되어 있습니다.즉, MVVM 구조에서 Observable하지 않은 기존 객체를 MVVM에 통합하는 핵심 기술입니다. ✅ ObservableProperty 사용법ㅇ ✅ 예제 소스 코드 2️⃣ 비교 ( 전통적 구현 vs ObservableObject vs..
12. 이벤트
12. 이벤트
2025.04.02이벤트는 대리자와 같은 개념으로, 대리자를 이해한 후 이벤트를 학습해야 한다.이벤트가 대리자와 다른점은, 이벤트는 메서드 안에서만 호출해서 사용 가능하다는 점이다. 이벤트가 시작되는 로직과, 이벤트에 영향을 받아 동작하는 로직을 구분하는것이 먼저다. 아래 예제는, 버튼이 눌려지면, 레이블에 문자열이 수정되는 구조를 구현한다고 가정하자.eg) [버튼 클릭 > 이벤트(대리자)] > 레이블 수정 1. 이벤트 선언 방법이벤트는 대리자를 event 한정자로 수식해서 만든다.[ event 키워드 ] [ 대리자 ] [ 이벤트이름 ]; 2. 이벤트 선언의 목적위 예제 구조에서 구현된 이벤트는, 이벤트를 형태의 선언이 목적이 아니다.레이블의 수정이 목적이다.시작은 Button 객체의 click 함수의 실행목적..
11. 대리자
11. 대리자
2025.04.021. 참고 자료더보기1. 참고 링크MSDN 2. 학습목표 - 3. 학습순서Callback 개념과 Delegate 용어대리자를 사용하는 이유Delegate를 선언하고 사용하는 방법일반화 대리자를 사용하는 방법Multicast Delegete (대리차 체인) 4. 대리자 사용 목적메서드를 변수처럼 사용하기 위해이벤트 처리메서드 호출을 런타임에 동적으로 변경할 때코드의 결합도 낮춤 (느슨한 결합, Loosely Coupled)여러 개의 메서드를 하나의 대리자에 연결, 한 번에 실행 가능LINQ, 람다 표현식에서의 활용비동기 호출 (BeginInvoke/EndInvoke) 2. 대리자 사용법더보기delegate 2. 사용 방법 delegate 2. 사용 방법1. 대리자를 선언하는 C# 문법: 대리자 학습 관..