2011-10-14 4 views
3

개발할 때 "나는 그냥 해보십시오"이상의 것을 시도하고 이해하려고합니다. 특히 WPF를 사용하면 바인딩의 두 측면을 모두 이해하고 싶습니다 ... GUI (xaml)와 코드 숨김 모두. 즉, 다음과 같은 코드가 무엇인지 궁금합니다.WPF 코드 숨김 코드

나는 미리 정의 된 "ICommand"인스턴스 (예 : 추가, 수정, 저장, 취소, 종료 등)가있는 ViewModel을 가지고 있으며 예상대로 작동합니다. 이제보기 (창) 단추가있는 바인딩을 보면 명령과 같은 바인딩이 있습니다.

<Button Command="{Binding ExitCommand}" Content="Exit" ... /> 

이 제대로 내가 양식을 종료 (그리고 내가 함께 연주하고있어 다른 무엇이든) 할 수 있도록하기위한 기대한다.

코드 숨김이 어떻게 생겼을까요? IsEnabled 또는 IsVisible과 같은 속성이 종속성 개체/속성에 바인딩된다는 것을 알고 있지만 명령 실행에 바인딩 할 때 상관 관계를 이해하지 못합니다. 감사.

답변

5

코드 바인딩에서 다른 바인딩과 동일한 방법으로 명령 바인딩을 만듭니다. 예를 들어

,

Binding b = new Binding(); 
b.Source = myViewModel; 
b.Path = new PropertyPath("ExitCommand"); 
MyButton.SetBinding(Button.CommandProperty, b); 

명령 바인딩 유형 ICommand의 개체에 바인딩 될 것으로 기대합니다. 단추 클릭과 같이 실행되면 그들은 먼저 ICommand.CanExecute()을 호출하고 이것이 사실이라면 ICommand.Execute()을 호출합니다. CommandParameter 프로퍼티가 설정되어 명령 바인딩이 WPF 버튼으로

CanExecuteExecute을 평가할 때 사용되는 경우, IsEnabled 속성이 자동으로 ICommand.CanExecute의 결과에 바인딩됩니다. CanExecute 메서드는 단추를 처음로드 할 때 한 번 실행되고 명령 바인딩이 변경 될 때마다 다시 실행됩니다.

CommandParameter과 같이 자주 업데이트하려는 경우 CommandParameter이 변경되면 바인딩을 업데이트하기 위해 추가로 연결해야합니다. 대부분 RelayCommands Microsoft PRISM의 DelegateCommand과 같은 다른 명령에는 기본적으로이 동작이 없지만 MVVM Light의 RelayCommand과 같은 기본 제공이 있습니다.

+0

그래, ICommand 부분을 가지고 있지만 "Property"처럼 보이지 않았기 때문에 확신하고 싶었지만 WPF에서 바인딩 할 수 있다고 생각합니다. :) – DRapp