WPF Prism 연구

AutoWireViewModelChanged


안녕하세요. 이재웅입니다.

이 긴 이름을 가진 메서드는 ViewModelLocationProvider를 통해 제공됩니다. 그리고 이름에서 알 수 있듯이 Prism 설정에 의해 View가 생성될 때 대상 ViewModel을 Injection 주입을 통해 자동으로 생성하고 그 결과를 콜백 메서드로 반환하는 기능을 제공하고 있습니다. 또한 콜백 메서드는 object 타입의 View와 object 타입의 ViewModel을 반환합니다.

Prism에서는 ViewModelLocationProvider 클래스를 통해 한 가지 유용한 이벤트(콜백함수 호출 방식)를 제공합니다.

사용 방법은 심플합니다. 먼저 이를 간단하게 테스트 하기 위해 간단한 UI 클래스를 만들었습니다. 이 클래스를 만든 이유는 모든 View에 공통으로 적용하기 위함입니다.

public class SmartView : ContentControl 
{
}

그 다음 ViewModelLocationProvider를 통한 AutoWireViewModelChanged 메서드와 콜백 메서드를 구현해보도록 하겠습니다.

public class SmartView : ContentControl
{
    public SmartView()
    {
        ViewModelLocationProvider
            .AutoWireViewModelChanged(this, AutoWireViewModelChanged);
    }
    private void AutoWireViewModelChanged(object view, object dataContext)
    {
        // Prism을 통해 생성된 Injection 주입된 ViewModel이 생성될 때 마다
        // 이 콜백 메서드가 호출됩니다!
    }
}

이 기능을 통해 Prism View와 ViewModel의 생성과 흐름을 좀 더 명확히 인지하고, View와 ViewModel이 모두 생성된 이 시점에서 다양한 확장 응용 작업을 할 수 있는 타이밍을 확보할 수 있습니다.

예를 들어 인터페이스를 활용한 이런 작업도 간단하게 가능하겠죠? (예를 들어!!!, 여러분의 MVVM 규칙에 맞게…)

public class SmartView : ContentControl
{
    public SmartView()
    {
        ViewModelLocationProvider
            .AutoWireViewModelChanged(this, AutoWireViewModelChanged);
    }
    private void AutoWireViewModelChanged(object view, object dataContext)
    {
        if (dataContext is IViewCreatable ui) 
        {
            ui.OnInitialized();
        }
    } 
}

그 밖에도 프로젝트 구조나 특성에 맞게 다양한 목적과 의도로 AutoWireViewModelChanged 메서드를 를 활용할 수 있을 것입니다.

제가 준비한 내용은 여기까지 입니다.
읽어주셔서 감사합니다. :smile:

3개의 좋아요