WPF
WPF MVVM에서 Window Close 호출 방법
leo21c
2025. 4. 23. 18:56
WPF MVVM에서 Window를 닫는 방법은 MVVM 패턴을 유지하면서 ViewModel에서 닫기 동작을 제어하는 방식으로 구현할 수 있습니다. 아래는 일반적인 접근 방법입니다:
1. Action을 활용한 Window 닫기
ViewModel에서 Action을 정의하고, View에서 이를 설정한 후 ViewModel에서 호출하는 방식입니다.
ViewModel
public Action CloseAction { get; set; }
public ICommand CloseCommand { get; }
public ViewModel()
{
CloseCommand = new RelayCommand(ExecuteClose);
}
private void ExecuteClose()
{
CloseAction?.Invoke(); // View에서 설정된 Close 메서드 호출
}
View (Code-Behind)
public MainWindow()
{
InitializeComponent();
var viewModel = new ViewModel();
DataContext = viewModel;
// ViewModel의 CloseAction에 Window 닫기 동작 연결
viewModel.CloseAction = new Action(this.Close);
}
2. Messenger를 활용한 Window 닫기
MVVM Light Toolkit과 같은 라이브러리의 Messenger를 사용하여 ViewModel에서 메시지를 보내고 View에서 이를 처리하는 방식입니다.
ViewModel
public ICommand CloseCommand { get; }
public ViewModel()
{
CloseCommand = new RelayCommand(() => Messenger.Default.Send(new NotificationMessage("CloseWindow")));
}
View (Code-Behind)
public MainWindow()
{
InitializeComponent();
Messenger.Default.Register<NotificationMessage>(this, message =>
{
if (message.Notification == "CloseWindow")
{
this.Close();
}
});
}
3. DialogResult를 활용한 닫기
Window.DialogResult를 설정하여 창을 닫는 방법입니다. 이 방법은 주로 Modal Dialog에서 사용됩니다.
ViewModel
public ICommand CloseCommand { get; }
public ViewModel()
{
CloseCommand = new RelayCommand(() => DialogResult = true);
}
public bool? DialogResult { get; set; }
View (Code-Behind)
public MainWindow()
{
InitializeComponent();
var viewModel = new ViewModel();
DataContext = viewModel;
// DialogResult를 ViewModel에서 설정 가능하도록 연결
viewModel.DialogResult = new Func<bool?>(() => this.DialogResult);
}
이 방법들 중 프로젝트의 요구사항에 맞는 방식을 선택하면 됩니다.
LIST