[WPF] DataContext, Command 바인딩

Doit·2023년 4월 4일
0

WPF

목록 보기
4/5

DataContext, Command 바인딩

📌DataContext

View가 어떤 Data를 이용해서 DataBinding을 걸겠다.'라고 정해 주는 것

즉, Bining 속성에 대해서 검색할 객체를 지정한다.

public MainWindow()
{
	InitializeComponent()
	this.DataContext = new InitializeComponent();
}

코드 비하인드에서 DataContext를 입력하고 XAML에서 Command를 바인딩하는 방식이 기본이지만 코드 비하인드의 DataContext 부분 없이 XAML에서만 Command 바인딩이 가능하다.

<Window.Resources>
	<local:ViewModel x:Key="vm"/>
</Window.Resources>

📌command

XAML UI에서 버튼을 클릭시 MVVM에서는 Click 이벤트 핸들러를 이용하기 보다는 Commamd를 이용하기를 권장한다. 여러 버튼에서 하나의 Command를 공유할 수 있으므로 모든 컨트롤마다 Click 이벤트를 만드는 방법 보다는 효율적이기 때문이다.

WPF의 명령(Command)은 ICommand 인터페이스를 구현하여 만들며 ICommand는 Execute 및 CanExecute라는 두 가지 메서드와 CanExecuteChanged 이벤트를 제공한다.

📎 Execute 메서드는 실제 처리해야 하는 작업을 기술하고 CanExecute 메소드에서는 Execute 메소드의 코드를 실행할지 여부를 결정하는 코드를 기술한다. CanExecute가 false를 리턴하면 Execute 메소드는 호출되지 않는다.

📎  즉 CanExecute 메소드는 명령을 사용 가능하게 하거나 사용 불가능하게 할 때 사용되며 명령을 사용할 수 있는지 여부를 확인하기 위해 WPF에 의해 호출된다. 이 메소드는 키보드 GET포커스, LOST포커스, 마우스 업 등과 같은 UI 상호 작용 중에 대부분 발생한다.

📎 사용자 정의 명령의 경우 CanExucute 메서드가 대부분의 시나리오에서 호출되지는 않으므로 어떤 조건에 따라 버튼을 활성화, 비활성화 해야 할 수도 있는데 ICommand 구현체에서 CanExecuteChanged 이벤트를 CommandManager의 RequerySuggested 이벤트에 연결하면 된다.

📎 CanExecute 메소드가 호출되어 CanExecute의 상태가 변경되면 CanExecuteChanged 이벤트가 발생해야 하며,  WPF는 CanExecute를 호출하고 Command에 연결된 컨트롤의 상태를 변경한다.

profile
c# .NET Develpoer

0개의 댓글

관련 채용 정보