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
'WPF' 카테고리의 다른 글
WPF TreeViewItem Font 스타일 변경 방법 (0) | 2025.04.23 |
---|---|
DialogService 이용하는 방법 (0) | 2025.04.23 |
WPF MVVM 패턴을 이용한 프로그램에서 Messagebox를 실행할 경우 호출 스택에서 throw 발생하는 경우 (0) | 2025.04.23 |
WPF Group에서 Category 또는 Group별로 표시 하는 방법 (1) | 2025.04.23 |
WPF MVVM TextBlock Foreground Binding (0) | 2023.06.16 |