(이번 포스팅은 command(1)편을 읽고 왔다는 전제로 작성되었습니다.)
버튼을 클릭하면 text박스창에 입력된 글자가 메세지박스로 출력되는것을 구현해보겠습니다.
![[c# wpf] command 개념/사용법(2) [c# wpf] command 개념/사용법(2)](http://t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png)
이 글을 읽기 전 선수 지식 포스팅
- [c#] Action, Func, Predicate 개념/ 차이
- [c# wpf] 데이터 바인딩 기초 개념/ 예제
- [c#] 박싱(boxing), 언박싱(unboxing) 개념과 사용 이유
//MainWindow.xaml
![[c# wpf] command 개념/사용법(2) - 이 글을 읽기 전 선수 지식 포스팅 [c# wpf] command 개념/사용법(2) - 이 글을 읽기 전 선수 지식 포스팅](http://t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png)
TextBox태그와 태그를 가리키는 이름(messagebox)을 추가해주었습니다.
그리고 CommandParameter라는 친구가 새롭게 등장하는데요.
이 친구는 xaml에서 전달받은 값을 c# 코드로 넘겨주는 역할을 합니다.
예제코드에서는 바인딩을 통해 TextBox로부터 전달받은 값을 CommandParameter로 전달 하는 구조입니다.
(바인딩이 낯선분은 데이터바인딩 포스팅을 읽고 와주시기 바랍니다.)
c#코드에서는 CommandParameter로부터 전달 받은 값을 어떻게 처리할까요?
//MessageCommand.cs
CommandParameter로 들어온 값은 Execute함수의 인자로 들어오게 됩니다.
![[c# wpf] command 개념/사용법(2) - 이 글을 읽기 전 선수 지식 포스팅 [c# wpf] command 개념/사용법(2) - 이 글을 읽기 전 선수 지식 포스팅](http://t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png)
타입이 object이기 때문에 실제로 들어오는 값의 타입은 string이지만 object로 박싱이 됩니다.
이를 재사용하기 위해서는 다시 string으로 언박싱을 해야합니다.
![[c# wpf] command 개념/사용법(2) - 이 글을 읽기 전 선수 지식 포스팅 [c# wpf] command 개념/사용법(2) - 이 글을 읽기 전 선수 지식 포스팅](http://t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png)
(박싱, 언박싱이 낯선분은 해당 포스팅을 참조하기 바랍니다.)
하지만 Invoke부분이 에러가 뜹니다.
왜일까요?
![[c# wpf] command 개념/사용법(2) - 이 글을 읽기 전 선수 지식 포스팅 [c# wpf] command 개념/사용법(2) - 이 글을 읽기 전 선수 지식 포스팅](http://t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png)
왜냐하면 우리가 앞서 정의한 Action은 인자를 받지 않는 델리게이트 형태이기 때문입니다.
즉 string인자를 받는 형태로 변경해줘야 합니다.
![[c# wpf] command 개념/사용법(2) - 이 글을 읽기 전 선수 지식 포스팅 [c# wpf] command 개념/사용법(2) - 이 글을 읽기 전 선수 지식 포스팅](https://blog.kakaocdn.net/dn/bB62GX/btrGu3IqXpD/eiwuvkfKxjUtrkgtbXlr3K/img.png)
(Action 델리게이트 부분이 낯선분은 해당 포스팅을 참조하기 바랍니다.)
마찬가지로 ViewModel에 있는 Action 델리게이트에 구독시킨 함수도 수정해줘야 합니다.
//MessageViewModel.cs
![[c# wpf] command 개념/사용법(2) - 이 글을 읽기 전 선수 지식 포스팅 [c# wpf] command 개념/사용법(2) - 이 글을 읽기 전 선수 지식 포스팅](https://blog.kakaocdn.net/dn/cKJ6bu/btrGupFm3jG/EGf3uh3Lc5bwlqesaKVjXK/img.png)
string 인자를 받는 형태로 DisplayMessage 함수를 수정해줍니다.
output:
![[c# wpf] command 개념/사용법(2) - 이 글을 읽기 전 선수 지식 포스팅 [c# wpf] command 개념/사용법(2) - 이 글을 읽기 전 선수 지식 포스팅](https://blog.kakaocdn.net/dn/URwp1/btrGw1pY9Fg/5m1yo5HtycCUigx1dIoop1/img.webp)
'c# > wpf' 카테고리의 다른 글
[wpf] System.IO.IOException: ''mainwindow.xaml' 리소스가 없습니다.’ 에러 해결방법 (0) | 2022.07.14 |
---|---|
[c# wpf] command(3) (with CanExecute 사용) (0) | 2022.07.06 |
[c# wpf] command 개념/사용법 (2) | 2022.06.30 |
[c# wpf] DataTemplate 사용 방법 (1) | 2022.06.27 |
[c#] 델리게이트를 왜 쓸까? (1) | 2022.06.24 |
댓글
꼬예님의
글이 좋았다면 응원을 보내주세요!
이 글이 도움이 됐다면, 응원 댓글을 써보세요. 블로거에게 지급되는 응원금은 새로운 창작의 큰 힘이 됩니다.
응원 댓글은 만 14세 이상 카카오계정 이용자라면 누구나 편하게 작성, 결제할 수 있습니다.
글 본문, 댓글 목록 등을 통해 응원한 팬과 응원 댓글, 응원금을 강조해 보여줍니다.
응원금은 앱에서는 인앱결제, 웹에서는 카카오페이 및 신용카드로 결제할 수 있습니다.