포스트

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 에 있던 기능이 독립 패키지로 나온 것

왜 쓰나?

  1. XAML 만으로 상호작용 추가 가능
    • 코드비하인드 없이 클릭, 드래그, 포커스 같은 이벤트 처리 가능
  2. MVVM 친화적
    • ViewModel 에 직접 이벤트 핸들러를 안달고, XAML 에서 Action/Command 로 연결할 수 있음.
  3. 재사용성
    • Behavior 하나 만들어 두면 여러 View 에서 재사용 가능
  4. 코드 분리
    • 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 이벤트 작성

  1. behavior namespace 추가 xmlns:b="http://schemas.microsoft.com/xaml/behaviors"

  2. 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 라이센스를 따릅니다.