MVVM에서 데이터 소스의 변경을 감지하는 방법은 무엇인가요?
_____A: MVVM(Model-View-ViewModel) 아키텍처에서는 View와 ViewModel 간의 데이터 바인딩을 통해 데이터 소스의 변경을 자동으로 감지하고 UI에 반영하는 것이 핵심입니다. 이를 구현하는 대표적인 방법은 다음과 같습니다:
1. INotifyPropertyChanged 인터페이스 구현
- ViewModel 혹은 데이터 모델 클래스가 `INotifyPropertyChanged` 인터페이스를 구현하여 속성 값이 변경될 때마다 `PropertyChanged` 이벤트를 발생시킵니다.
- View는 이 이벤트를 구독하여 변경된 데이터를 감지하고 UI를 갱신합니다.
- 예:
```csharp
public class PersonViewModel : INotifyPropertyChanged
{
private string _name;
public string Name
{
get => _name;
set
{
if (_name != value)
{
_name = value;
OnPropertyChanged(nameof(Name));
}
}
public event PropertyChangedEventHandler PropertyChanged;
protected void OnPropertyChanged(string propertyName)
{
PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName));
}
}
```
2. ObservableCollection
- 컬렉션 데이터의 변경(추가, 삭제 등)을 감지하려면 일반 리스트 대신 `ObservableCollection
- 이 컬렉션은 내부적으로 `INotifyCollectionChanged` 인터페이스를 구현해 컬렉션 변경 이벤트를 발생시켜 UI에 반영됩니다.
- 주로 목록 바인딩에 적합합니다.
3. 커맨드(Command)와 데이터 바인딩 활용
- View에서 발생하는 사용자 동작을 Command 패턴을 통해 ViewModel에 전달하고, ViewModel 내부에서 데이터 상태 변화 시 위의 알림 메커니즘으로 변경 감지를 처리합니다.
4. 양방향 바인딩 지원 프레임워크 활용
- 예를 들어 WPF, Xamarin.Forms, MAUI 등 프레임워크에서는 XAML 바인딩을 통해 `INotifyPropertyChanged`, `ObservableCollection`을 자동으로 감지하고 UI와 동기화합니다.
요약하자면, MVVM에서 데이터 변경 감지는 주로 `INotifyPropertyChanged`(속성 변경)와 `ObservableCollection`(컬렉션 변경)을 구현하여 이루어지며, View와 ViewModel 사이의 데이터 바인딩을 통해 UI가 실시간으로 변경 사항을 반영하도록 지원합니다.
MVVM에서 데이터 소스의 변경을 감지하는 방법은 주로 데이터 바인딩과 관련된 기술을 통해 이루어집니다.
이 과정에서 중요한 개념은 `INotifyPropertyChanged` 인터페이스와 `ObservableCollection` 클래스입니다.
1. INotifyPropertyChanged 인터페이스 MVVM에서 데이터 소스의 변경을 감지하기 위해 가장 많이 사용되는 방법 중 하나는 `INotifyPropertyChanged` 인터페이스를 구현하는 것입니다.
이 인터페이스는 속성이 변경될 때 알림을 제공하는 메커니즘을 제공합니다.
구현 방법: - 모델 또는 뷰모델 클래스에서 `INotifyPropertyChanged`를 구현합니다.
- 속성이 변경될 때 `PropertyChanged` 이벤트를 발생시킵니다.
```csharp public class Person : INotifyPropertyChanged { private string name; public string Name { get { return name; } set { if (name != value) { name = value; OnPropertyChanged(nameof(Name)); } } } public event PropertyChangedEventHandler PropertyChanged; protected virtual void OnPropertyChanged(string propertyName) { PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName)); } } ``` 위의 예제에서 `Name` 속성이 변경될 때마다 `OnPropertyChanged` 메서드를 호출하여 UI에 변경 사항을 알립니다.
2. ObservableCollection
이 클래스는 `INotifyCollectionChanged` 인터페이스를 구현하여 아이템이 추가되거나 제거될 때 UI에 알림을 제공합니다.
사용 예: ```csharp public class ViewModel { public ObservableCollection
3. Command 패턴 MVVM에서는 사용자 인터페이스의 이벤트를 처리하기 위해 Command 패턴을 사용합니다.
Command는 특정 작업을 수행하는 메서드를 캡슐화하여 UI와 비즈니스 로직 간의 결합을 줄입니다.
Command를 사용하여 데이터 소스의 변경을 트리거할 수 있습니다.
```csharp public class RelayCommand : ICommand { private readonly Action
작성자:
정시우 [비회원]
| 작성일자: 1년 전
2024-12-04 15:02:30
조회수: 163 | 댓글: 0 | 좋아요: 0 | 싫어요: 0
조회수: 163 | 댓글: 0 | 좋아요: 0 | 싫어요: 0
내용이 부정확하다면 싫어요를 클릭해주세요.