(이번 포스팅은 command(1)편을 읽고 왔다는 전제로 작성되었습니다.)
버튼을 클릭하면 text박스창에 입력된 글자가 메세지박스로 출력되는것을 구현해보겠습니다.
이 글을 읽기 전 선수 지식 포스팅
- [c#] Action, Func, Predicate 개념/ 차이
- [c# wpf] 데이터 바인딩 기초 개념/ 예제
- [c#] 박싱(boxing), 언박싱(unboxing) 개념과 사용 이유
//MainWindow.xaml
TextBox태그와 태그를 가리키는 이름(messagebox)을 추가해주었습니다.
그리고 CommandParameter라는 친구가 새롭게 등장하는데요.
이 친구는 xaml에서 전달받은 값을 c# 코드로 넘겨주는 역할을 합니다.
예제코드에서는 바인딩을 통해 TextBox로부터 전달받은 값을 CommandParameter로 전달 하는 구조입니다.
(바인딩이 낯선분은 데이터바인딩 포스팅을 읽고 와주시기 바랍니다.)
c#코드에서는 CommandParameter로부터 전달 받은 값을 어떻게 처리할까요?
//MessageCommand.cs
CommandParameter로 들어온 값은 Execute함수의 인자로 들어오게 됩니다.
타입이 object이기 때문에 실제로 들어오는 값의 타입은 string이지만 object로 박싱이 됩니다.
이를 재사용하기 위해서는 다시 string으로 언박싱을 해야합니다.
(박싱, 언박싱이 낯선분은 해당 포스팅을 참조하기 바랍니다.)
하지만 Invoke부분이 에러가 뜹니다.
왜일까요?
왜냐하면 우리가 앞서 정의한 Action은 인자를 받지 않는 델리게이트 형태이기 때문입니다.
즉 string인자를 받는 형태로 변경해줘야 합니다.
(Action 델리게이트 부분이 낯선분은 해당 포스팅을 참조하기 바랍니다.)
마찬가지로 ViewModel에 있는 Action 델리게이트에 구독시킨 함수도 수정해줘야 합니다.
//MessageViewModel.cs
string 인자를 받는 형태로 DisplayMessage 함수를 수정해줍니다.
output:
'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 |
댓글