개발노트

7. [.NET MAUI] ICommand 사용하기 본문

앱 개발/.NET MAUI

7. [.NET MAUI] ICommand 사용하기

mroh1226 2022. 3. 10. 14:31
반응형

ICommand 를 이용하여 MainPage에 있는 Label의 Text 값을 변경해보자.

 

사용할 ICommand 인터페이스는 아래와 같다.

 

ICommand 인터페이스

- void Execute(object parameter): 실행될 소스

- bool CanExecute(object parameter): Execute소스가 실행되기 전, bool형을 return 받아 실행여부를 결정한다.


위의 ICommand를 상속받은 Command 클래스를 이용한다.

Command 클래스


여기서, Action<>과 Func<>의 차이를 잠깐 살펴보면,

- Action<매개변수 T>은 리턴값이 없는 무명의 Delegate 선언이다.

예시)

        public MainPage_ViewModel()
        {
            Action<int, int> act1 = Plus;
            act1(1, 2);
        }

        public void Plus(int a, int b)
        {
            System.Console.WriteLine(a + b);
        }

- Func<매개변수 T, 리턴값 TResult>은 리턴값이 있는 무명의 Delegate 선언이다.

예시)

        public MainPage_ViewModel()
        {
            Func<int, int, int> func = PlusReturn;
            int c = PlusReturn(1, 2);
        }

        public int PlusReturn(int a, int b)
        {
            return a + b;
        }

1. MainPage_ViewModel.cs (ViewModel) 소스를 오픈한다.

네임스페이스에 ICommand 사용을 위한 Windows.Input을 추가한다.

using System.Windows.Input; //ICommand 인터페이스 사용을 위한 네임스페이스 추가

2. ICommand 인터페이스 작성

 public ICommand Set_Label10 { get; set; }
        
 public MainPage_ViewModel()
 {
 	Set_Label10 = new Command(() =>
 	{
 		//Execute
 		_Row_Column = "1,0";
 		OnPropertyChanged("Row_Column");
    	},
    	() =>
    	{
    		//CanExecute
    		return true;    //조건이 없기때문에 무조건 실행되도록 true로 리턴한다.
    	});
 }

2-1) ICommand를 멤버변수로 선언하고 (Set_Label10) 

2-2) MainPage_ViewModel 생성자 선언문 안에 Set_Label10의 Command를 람다식으로 작성한다.

2-3) Grid중 Row = 1, Column = 0을 클릭했을때 발생할 Command이기 때문에 _Row_Column 값을 "1,0"으로 바꿔준다.
2-4) OnPropertyChanged로 "Row_Column"의 값이 바뀌었음을 알린다.
2-5) CanExecute 에는 Execute가 실행되어야할 조건이 없기 때문에 true를 준다.


3. MainPage.xaml을 오픈한 뒤 Button의 Command Property를 아래와 같이 수정해준다.

3-1) ResourceDictionary를 사용하는 경우

<Button Grid.Row="1" Grid.Column="0" Text="1,0" 
		Command="{Binding Source={StaticResource MainPageVM},Path=Set_Label10}" />

3-2) MainPage.xaml.cs 에 BindingContext = new MainPage_ViewModel(); 를 작성한경우

<Button Grid.Row="1" Grid.Column="0" Text="1,0" 
		Command="{Binding Set_Label10}" />

 


4. 빌드하고 클릭해본다.

클릭 후 Label 값

다음시간에는 INavigation 으로 Page (View)를 전환하는 방법을 설명드리겠습니다.

반응형
Comments