rkttu
October 1, 2024, 11:26am
1
.NET 8에 들어오면서, Windows Forms에서도 ICommand 기반의 MVVM 패턴을 완전히 구현할 수 있게 되었죠
그래서, Windows Forms에서도 Generic Host를 시작으로 Dependency Injection, MVVM, Command 패턴을 빠짐없이 사용할 수 있는지 살펴보았고, 코드 작성 난이도가 다소 높긴 하나 충분히 해볼만한 것 같습니다. 여기에 맞추어 샘플 코드를 만들어봤습니다.
관심있으신 분들께 참고가 될만한 레퍼런스 코드를 GitHub Gist로 공유해봅니다.
10 Likes
rkttu
October 1, 2024, 11:30am
2
확실히 Windows Forms는 오래된 코드베이스여서 그런지 이 예제의 테마에 맞추어 코드를 작성할 때 생각보다 타이핑해야 할 코드의 양이 제법 많은 편입니다.
그래서 코드를 간결하게 만들어줄 익스텐션 메서드가 잘 쓰일 필요가 있겠다는 생각도 듭니다.
6 Likes
기왕이면 Button에 Command를 직접 지정하는 것 보다 DataBindings에 Binding을 추가하시면 더욱 멋진 예제가 되지 않을까 싶습니다.
// 확인 버튼 추가
var okayButton = new Button()
{
Parent = buttonPanel,
Text = "OK",
DialogResult = DialogResult.OK,
AutoSize = true,
//Command = _viewModel.AcceptCommand,
//CommandParameter = _viewModel,
};
okayButton.DataBindings.Add(new Binding(
nameof(okayButton.Command),
DataContext,
nameof(_viewModel.AcceptCommand),
true,
DataSourceUpdateMode.OnPropertyChanged
));
this.AcceptButton = okayButton;
// 취소 버튼 추가
var cancelButton = new Button()
{
Parent = buttonPanel,
Text = "Cancel",
DialogResult = DialogResult.Cancel,
AutoSize = true,
//Command = _viewModel.CancelCommand,
//CommandParameter = _viewModel,
};
cancelButton.DataBindings.Add(new Binding(
nameof(cancelButton.Command),
DataContext,
nameof(_viewModel.CancelCommand),
true,
DataSourceUpdateMode.OnPropertyChanged
));
4 Likes
이런걸 원했는데 윈품이군요 …ㅜㅜㅜ wpf 는 없을까요…
1 Like
rkttu
October 25, 2024, 3:24am
5
시간되면 WPF 버전도 샘플 만들어보겠습니다. ㅎㅎ
2 Likes