무효 클릭 IP 추적 중...
c#/wpf

[c# wpf] command(3) (with CanExecute 사용)

꼬예 2022. 7. 6.

 

 

(해당 포스팅은 command(2) 포스팅을 읽고 왔다는 전제로 작성되었습니다.)

 

command(1) 포스팅에서,

 

코드사진

 

ICommand 인터페이스 구현 메소드 중 하나인 CanExecute boolean 값을 리턴하는데 true일때 버튼이 활성화되고 false일때 비활성화 된다라고만 설명하고 넘어갔었죠.

 

CanExecute

 

이번 포스팅에서는 CanExecute 함수를 통해 아래와 같은 기능을 구현해보겠습니다.

 

 

글자를 입력하기전에는 버튼이 비활성화 상태였다가 글자가 입력되면 활성화되는 로직입니다.

 

//MainWindow.xaml

 

xaml

 

UI단은 기존 코드랑 차이가 없습니다.

 

//MesageViewModel.cs

 

 

ViewModel 생성자에 정의한 Command 클래스의 인자를 받는 자리가 두개로 늘어났습니다.

 

새로 생긴 자리에는 AddMessage라는 함수를 넣어주게 되는데요.

AddMessage 함수는 인자로 string값을 받고, 그 string값의 길이에 따라 true 또는 false를 반환하는 로직을 가지고 있습니다.  

 

우리 목표 예시에서 글자를 입력하면 true, 글자를 입력하지않으면 false로 세팅해야 하기 때문에 글자수가 0일때 false, 0이 아닐때 true로 설정하였습니다.

 

 

벌써 감이 오시는 분들이 있겠지만, 이 함수가 Command단에 canexecute 이벤트와 연결되는 함수입니다.

 

canexecute 이벤트가 뭐냐구요?

 

command단으로 가보시죠.

 

//MessageCommand.cs

 

 

빨간색 사각형 부분이 새로 추가된 부분입니다.

앞서 설명한 AddMessage 함수가 _canExecute 델리게이트에 연결되는 구조입니다.

 

AddMessage 함수가 boolean 값을 리턴하는 형태이니까 Predicate 델리게이트를 이용하였습니다.

(Predicate가 낯선분은 해당 포스팅 참조)

 

그리고 이 델리게이트를 실행하는 로직을 CanExecute함수 안에 작성합니다.

 

 

자, 이제 모든 작업이 끝난거 같습니다.

한번 실행해볼까요?

 

output:

 

 

글자를 입력하는데도 버튼이 활성화가 되지 않습니다.

 

왜그럴까요?

 

CanExecute함수는 우리 마음대로 실행할 수 없기 때문입니다. 즉 값이 변한다고해서 실행이 안된다는것이죠.

그렇다면 어떻게 할까요?

 

CanExecutedChanged 수정

 

CanExecuteChanged 이벤트를 위와 같은 형태로 작성해줘야 합니다.

 

해당 작업을 통해 값의 변화가 있을때마다 CanExecute 함수가 실행 됩니다.

 

output:

 

 

 

  • 트위터 공유하기
  • 페이스북 공유하기
  • 카카오톡 공유하기
이 컨텐츠가 마음에 드셨다면 커피 한잔(후원) ☕

댓글