[C# WPF] ICommand를 활용한 버튼 커맨드 방법

2019. 3. 4. 00:24·Programming/C# WPF
728x90
반응형

이번에는 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를 추가하여 활용하면 다양한 방법으로 응용이 가능합니다.

728x90
반응형
저작자표시 (새창열림)

'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
'Programming/C# WPF' 카테고리의 다른 글
  • MVVM 패턴에서의 명확한 역할 분리 방법
  • [C# WPF] Button Style Custom 방법
  • [C# WPF] Window화면 Custom하기
  • C# WPF] INotifyPropertyChanged 인터페이스를 이용한 데이터 바인딩 방법
이프로그
이프로그
리뷰, 개발, 일상을 기록하는 블로그
    반응형
    250x250
  • 이프로그
    이프로그의 IT이야기
    이프로그
  • 전체
    오늘
    어제
    • 분류 전체보기 (158)
      • Programming (111)
        • C# WPF (11)
        • Java Spring (16)
        • JavaScript & TypeScript (5)
        • Git (9)
        • Database (5)
        • Etc (42)
      • 생활상식 (24)
      • 리뷰 (8)
      • 주식 (12)
  • 블로그 메뉴

    • 링크

    • 공지사항

    • 인기 글

    • 태그

      재테크
      dynamicresource
      Java
      Apache Kafka
      분산 메시징 시스템
      javascript
      클라우드 컴퓨팅
      주식투자
      C# WPF
      투자
      데이터 파이프라인
      서버 관리
      웹 개발
      rest api
      데이터베이스 성능
      자바스크립트 트릭
      WPF
      ES6
      투자전략
      docker
      클라우드 네이티브
      마이크로서비스
      이슈 트래킹
      데이터 바인딩
      DevOps
      java8
      소프트웨어 개발
      Kubernetes
      XAML
      협업 도구
    • 최근 댓글

    • 최근 글

    이프로그
    [C# WPF] ICommand를 활용한 버튼 커맨드 방법
    상단으로

    티스토리툴바