[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 인터페이스를 이용한 데이터 바인딩 방법
이프로그
이프로그
리뷰, 개발, 일상을 기록하는 블로그
    반응형
  • 이프로그
    이프로그의 IT이야기
    이프로그
  • 전체
    오늘
    어제
    • 분류 전체보기 (158)
      • Programming (111)
        • C# WPF (11)
        • Java Spring (16)
        • JavaScript & TypeScript (5)
        • Git (9)
        • Database (5)
        • Etc (42)
      • 생활상식 (24)
      • 리뷰 (8)
      • 주식 (12)
  • 블로그 메뉴

    • 링크

    • 공지사항

    • 인기 글

    • 태그

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

    • 최근 글

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

    티스토리툴바