이번에는 WPF에서 없어서는 안될 기능 중 하나인 ICommand에 대해서 설명해보려 합니다. 일반적으로 ICoomand는 .xaml파일에서 버튼, 라디오 버튼 체크박스 버튼 등 버튼과 관련된 커맨드의 동작을 이벤트를 처리하기 위한 인터페이스입니다.
아래 예제는 간단하게 버튼을 생성하고 RelayCommand라는 클래스에 ICommand를 상속받아서 버튼의 이벤트를 처리하는 코드를 추가하도록 하겠습니다. RelayCommand예제는(https://www.codeproject.com/Tips/813345/Basic-MVVM-and-ICommand-Usage-Example) 사이트를 참고하시면 도움이 될 것 같습니다.
<Window x:Class="ButtonBinding.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:local="clr-namespace:ButtonBinding"
mc:Ignorable="d"
Title="MainWindow" Height="450" Width="800">
<Grid>
<Grid.RowDefinitions>
<RowDefinition Height="10*" />
<RowDefinition Height="90*" />
</Grid.RowDefinitions>
<Button Grid.Row="0"
Width="100"
Height="40"
Margin="0 0 10 0"
Content="버튼"
Command="{Binding ButtonCmd}"
HorizontalAlignment="Right" />
</Grid>
</Window>
먼저 간단하게 버튼을 하나 만들고 위와 같이 Command로 바인딩 할 객체를 생성합니다. 그 후 코드비하인드에는 아래와 같이 ViewModel을 DataContext하여 연결하면 됩니다.
public partial class MainWindow : Window
{
public MainWindow()
{
InitializeComponent();
this.DataContext = new MainWindowViewModel();
}
}
이렇게 하면 해당 xaml파일의 View에 해당되는 정보들을 바인딩 할 수 있습니다. 그 후 RelayCommand에 ICommand를 상속받아서 바인딩의 기능을 추가하면 됩니다. 해당 코드는 위의 링크에서 가져온 방법이며, 이외에도 다양한 방법으로 커맨드의 기능을 추가할 수 있습니다. RelayCommand클래스는 해당 링크의 RelayCommand클래스 소스를 참고하시면 됩니다.
이 후 ViewModel에서는 .xaml파일에서 커맨드바인딩 해 놓은 객체를 생성하여 RelayCommand를 생성하면 됩니다.
그 후 아래와 같이 ViewModel를 생성하여 ButtonCmd를 생성하기만 하면 됩니다. 일반적으로 ButtonCmdExe메서드는 클릭 동작 수행 메서드이며, CanButtonCmdExe는 해당 버튼 활성화 제어 메서드입니다.
public class MainWindowViewModel
{
public RelayCommand ButtonCmd { get; set; }
public MainWindowViewModel()
{
ButtonCmd = new RelayCommand(ButtonCmdExe, CanButtonCmdExe);
}
private void ButtonCmdExe(object param)
{
MessageBox.Show("버튼 클릭");
}
private bool CanButtonCmdExe(object param)
{
return true;
}
}
이렇게 코드를 작성하시면 화면의 버튼이 ViewModel를 통해서 제어할 수 있게 됩니다.
해당 화면은 간단하게 Button만 만들었지만 이러한 방법으로 CommandParameter를 추가하여 활용하면 다양한 방법으로 응용이 가능합니다.
'Programming > C# WPF' 카테고리의 다른 글
MVVM 패턴에서의 명확한 역할 분리 방법 (0) | 2024.06.30 |
---|---|
[C# WPF] Button Style Custom 방법 (0) | 2019.06.12 |
[C# WPF] Window화면 Custom하기 (0) | 2018.09.05 |
C# WPF] INotifyPropertyChanged 인터페이스를 이용한 데이터 바인딩 방법 (1) | 2018.04.17 |
C# WPF] MVVM 패턴을 활용한 프로젝트 관리 방법 (3) | 2018.03.23 |