UWP(Universal Windows Platform)는 다양한 Windows 기기에서 작동할 수 있는 앱을 개발할 수 있는 플랫폼입니다. UWP 앱은 MVVM(Model-View-ViewModel) 디자인 패턴을 사용하여 UI와 비즈니스 로직을 분리하는 것이 일반적입니다. 이번 글에서는 UWP 앱의 UserListViewModel
을 수정하여 기능을 추가하는 방법에 대해 자세히 알아보겠습니다. 이 예제는 기본적인 데이터 바인딩 및 명령 패턴을 활용하여 사용자 목록을 관리하는 방법을 보여줍니다.
MVVM 패턴 이해하기
UWP 앱 개발에서 MVVM 패턴은 매우 중요합니다. 이 패턴은 세 가지 주요 구성 요소로 나뉘어 있습니다:
- Model: 애플리케이션의 데이터 및 비즈니스 로직을 포함합니다.
- View: 사용자 인터페이스(UI)를 구성하며 사용자가 보는 부분입니다.
- ViewModel: View와 Model 사이의 중재자로, View에 필요한 데이터와 명령을 제공합니다.
UserListViewModel
은 사용자 목록을 나타내고 관리하는 ViewModel입니다. 이 ViewModel은 사용자 목록 데이터를 ObservableCollection으로 관리하며, 이 컬렉션의 변경 사항을 View에 자동으로 반영합니다.
UserListViewModel 구조 파악하기
기본적으로 UserListViewModel
은 사용자의 리스트를 가져오고 필터링하는 기능을 수행할 수 있습니다. 다음은 기본적인 UserListViewModel
의 구조입니다:
csharp
public class UserListViewModel : INotifyPropertyChanged
{
private ObservableCollection _users;
public ObservableCollection Users
{
get { return _users; }
set
{
_users = value;
OnPropertyChanged(nameof(Users));
}
}
public UserListViewModel()
{
Users = new ObservableCollection();
LoadUsers();
}
private void LoadUsers()
{
// 사용자를 여기에서 로드합니다.
}
public event PropertyChangedEventHandler PropertyChanged;
protected void OnPropertyChanged(string propertyName)
{
PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName));
}
}
UserListViewModel에 기능 추가하기
이 사용자 목록 ViewModel에 검색 및 필터링 기능을 추가해보겠습니다. 이를 통해 사용자는 사용자의 이름으로 목록을 검색할 수 있습니다. 이를 위해 다음과 같은 속성과 메서드를 추가할 수 있습니다.
csharp
private string _searchTerm;
public string SearchTerm
{
get { return _searchTerm; }
set
{
_searchTerm = value;
OnPropertyChanged(nameof(SearchTerm));
FilterUsers();
}
}
private void FilterUsers()
{
// 사용자 목록을 필터링하는 로직을 여기에 추가합니다.
}
이제 FilterUsers()
메서드에서 사용자의 이름을 기반으로 Users 컬렉션을 필터링하는 로직을 구현할 수 있습니다.
csharp
private void FilterUsers()
{
var filteredUsers = Users.Where(user => user.Name.Contains(SearchTerm, StringComparison.OrdinalIgnoreCase)).ToList();
Users.Clear();
foreach (var user in filteredUsers)
{
Users.Add(user);
}
}
UI와의 데이터 바인딩
이제 UserListViewModel을 UI와 연결합시다. UWP의 XAML에서는 데이터 바인딩을 통해 ViewModel의 프로퍼티를 쉽게 바인딩할 수 있습니다. 우선 XAML 파일에서 데이터 컨텍스트를 설정해야 합니다.
xml
데이터와 사용자 정의 객체
User
클래스는 사용자 정보를 담고 있어야 합니다. 다음은 User
클래스의 기본적인 구조입니다.
csharp
public class User
{
public string Name { get; set; }
}
종합 예제
모든 코드를 종합하여 예제를 완성해보겠습니다. 아래는 완전한 UserListViewModel
구현 및 XAML 페이지의 예입니다.
csharp
public class User
{
public string Name { get; set; }
}
public class UserListViewModel : INotifyPropertyChanged
{
private ObservableCollection _users;
public ObservableCollection Users
{
get { return _users; }
set
{
_users = value;
OnPropertyChanged(nameof(Users));
}
}
private string _searchTerm;
public string SearchTerm
{
get { return _searchTerm; }
set
{
_searchTerm = value;
OnPropertyChanged(nameof(SearchTerm));
FilterUsers();
}
}
public UserListViewModel()
{
Users = new ObservableCollection();
LoadUsers();
}
private void LoadUsers()
{
// 사용자 목록 샘플 데이터 추가
Users.Add(new User { Name = "Alice" });
Users.Add(new User { Name = "Bob" });
Users.Add(new User { Name = "Charlie" });
}
private void FilterUsers()
{
var filteredUsers = Users.Where(user => user.Name.Contains(SearchTerm, StringComparison.OrdinalIgnoreCase)).ToList();
Users.Clear();
foreach (var user in filteredUsers)
{
Users.Add(user);
}
}
public event PropertyChangedEventHandler PropertyChanged;
protected void OnPropertyChanged(string propertyName)
{
PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName));
}
}
xml
결론
이번 글에서는 UWP 개발에서 UserListViewModel
을 수정하여 필터링 기능을 추가하는 방법을 다루었습니다. MVVM 패턴을 활용한 데이터 바인딩 방식으로 사용자 목록을 효율적으로 관리할 수 있음을 보여주었습니다. 이러한 구조적 접근 방식은 UWP 앱 개발에서 코드의 재사용성과 유지보수성을 높이는 데 큰 도움을 줍니다.
UWP 개발을 계속하면서 더 많은 패턴과 기법을 배우고 이를 적용하여 더 나은 앱을 개발하시기 바랍니다.