Nuget Package, Microsoft.Xaml.Behaviors
Microsft.Xaml.Behaviors
Nuget Package, Microsoft.Xaml.Behaviors
MVVM 패턴을 쓰면서 같이 사용하면 좋은 Nuget Package 를 소개 한다.
Microsoft.Xaml.Behaviors 란?
- WPF 에서 Behavior, Trigger, Action 기능을 제공하는 라이브러리
- XAML 에서 직접 동작(로직)을 붙일 수 있게 해주는 기능 모음
- Blend SDK 에 있던 기능이 독립 패키지로 나온 것
왜 쓰나?
- XAML 만으로 상호작용 추가 가능
- 코드비하인드 없이 클릭, 드래그, 포커스 같은 이벤트 처리 가능
- MVVM 친화적
- ViewModel 에 직접 이벤트 핸들러를 안달고, XAML 에서 Action/Command 로 연결할 수 있음.
- 재사용성
- Behavior 하나 만들어 두면 여러 View 에서 재사용 가능
- 코드 분리
- View 의 이벤트 처리 로직을 XAML 로 분리 → 깔끔한 MVVM 구조 유지.
대표 기능 예시
EventTrigger
: 특정 이벤트 발생 시 Action 실행InvokeCommandAction
: 이벤트 발생 시 Command 실행Behavior
: UI 요소에 기능 추가
언제 사용할까?
윈도우가 Load 될 때 발생하는 Loaded 이벤트를 구현하려면 어떻게 해야할까? 비하인드 코드에 손쉽게 구현할 수 있지만 ViewModel 에 구현해야한다면?
MVVM 관점에서는 Loaded Event 자체는 MVVM 위반이 아니지만 Loaded 에서 비즈니스 로직을 직접 실행하면 위반이다.
View 에서 ViewModel 로 이벤트 전달하기 Without Behaviors
Loaded 이벤트를 추가하고
1
2
3
<Window ...
Loaded="Window_Loaded"
</Window>
ViewModel 에게 이벤트 전달
1
2
3
4
5
6
7
private void Window_Loaded(object sender, RoutedEventArgs e)
{
if (DataContext is MainViewModel vm)
{
vm.LoadedEvent();
}
}
1
2
3
4
public void LoadedEvent()
{
ButtonText = "Loaded!";
}
MVVM 패턴을 위반하지 않고 구현할 수 있지만 비하인드 코드에 로직이 추가되었다. 만약 여러 개의 이벤트가 있다면 비하인드 코드는 계속해서 늘어날 것이다.
View 에서 ViewModel 로 이벤트 전달하기 With Behaviors
위에서 작성했던 코드는 삭제한다.
1. Microsoft.Xaml.Behaviors 설치
Behaviors 를 사용하기 위해서 Nuget Package 를 설치하여 준다. 역시 마이크로소프트에서 기능을 제공한다.
2. Xaml 에 Loaded 이벤트 작성
behavior namespace 추가
xmlns:b="http://schemas.microsoft.com/xaml/behaviors"
xaml 에 Loaded 이벤트 작성
1 2 3 4 5
<b:Interaction.Triggers> <b:EventTrigger EventName="Loaded"> <b:InvokeCommandAction Command="{Binding LoadedEventCommand}"/> </b:EventTrigger> </b:Interaction.Triggers>
3. ViewModel 에 RelayCommand 연결
1
2
3
4
5
[RelayCommand]
private void LoadedEvent()
{
ButtonText = "Loaded!";
}
역시 기존 방법 보다는 조금 복잡하지만 비하인드 코드에 한 줄도 추가하지 않고 구현했다는 점이 있다.
MVVM 패턴을 사용하면 초기에는 번거롭지만 협업, 유지 보수 면에 있어서는 확연한 이점이 있다.
이 기사는 저작권자의 CC BY 4.0 라이센스를 따릅니다.