2013-03-06 3 views
5

저는 사람들이 코드에서 CanExecute와 같은 메서드를 만드는 자습서를 보았습니다. 나는 독자들이이 모든 것이 어떻게 작동하는지 이해할 수 있도록 돕기 위해이 작업을하고 있다고 가정하고 있습니다. 커맨드와 ICommand를 살펴보면 MSDN의 ICommand 클래스로 Windows 스토어 앱에 사용됩니다. WPF 용 Command 클래스가 없습니까?MVVM의 명령

답변

8

WPF에서 ICommand의 기본 제공 구현은 RoutedCommand (및 해당 형제 인 RoutedUICommand)입니다. 이 같은 RoutedCommand 작품 : 전형적인 ICommand의 경우와 같이 RoutedCommand

ExecuteCanExecute 방법은 명령에 대한 애플리케이션 로직을 포함하지 않는 것이 아니라, 이러한 방법은 을 통과 이벤트를 발생 요소 트리가 CommandBinding 인 객체를 찾고 있습니다. CommandBinding에 연결된 이벤트 핸들러에는 명령 논리가 들어 있습니다.

이 문제는이 이벤트 핸들러는 이 MVVM에 싶지 무엇을 정확하게 당신의 보기에 대한 숨김 코드에 연결해야한다는 것입니다. 당신이 코드에서 CanExecute 방법을 참조

자습서는 사용자 정의 명령 구현을 사용하는 (그리고에 의해 우리는 정말 ICommand 구현 외부의 코드 을 의미)과 같은 DelegateCommand과에 "앞으로"자신의 CanExecute/Execute 로직 설계 RelayCommand 즉석에서 제공되는 기능; 일반적으로 명령을 표시하는 뷰 모델의 메서드입니다.

이러한 구현은 대개 MVVM 프레임 워크에서 제공됩니다 (이 두 예제의 경우 프레임 워크는 각각 Prism 및 MVVM Light 임).하지만 실제로는 간단합니다 (둘 다 오픈 소스, 코드를 가져 와서 읽음). 프레임 워크 전체가 필요하지 않은 경우 코드 복사/붙여 넣기에서 가져옵니다.

위의 내용을 "은 WPF에 내장 된 명령 클래스이지만 MVVM 컨텍스트에서는 유용하지 않습니다."라고 요약 할 수 있습니다.

+1

새로운 OP가 MVVM에 어떻게 적용되는지에 따라 특정 MVVM 프레임 워크를 사용하지 않고도 DelegateCommand의 고유 버전을 매우 간단하게 구현할 수 있다는 점에 유의해야합니다. – Thelonias

+0

@ 라이언 : 감사합니다. 답변을 수정하고 제안 사항을 반영합니다. – Jon

+0

DelegateCommand는 Microsoft에서 사용할 수 있도록 제공됩니까? 이 첫 번째 WPF 응용 프로그램과 내 첫 번째 MVVM 응용 프로그램입니다. 비록 내가 2 년 동안 WinForms를 사용 해왔다. 지금까지 WPF 정말 좋아해요! 이것은 첫 번째 MVVM 응용 프로그램이기 때문에 모든 코드를 직접 만들고 MVVM Light와 같은 프레임 워크를 사용하지 않으므로 모든 것이 작동하는 방식을 더 잘 이해할 수 있습니다. – tylerbhughes