2016-08-18 2 views
1
ModelRequestCommand = new DelegateCommand(PopulateModelRequest); 

오류가없고 문제가 없지만 매개 변수 (int ProgramID)를 채우기 모델 요청에 전달하려고합니다. ProgramID는매개 변수가있는 위임 명령

this.ProgramId = ProgramID; 

내가 이것에 대해 가서 어떻게

ModelRequestCommand = new DelegateCommand(PopulateModelRequest(int ProgramID); 

을 시도 할 때 오류를 제공하여 정의인가? 이

PopulateModelRequest(int ProgramID) 

같은 방법에 parantesis를 추가 할 때 당신은 당신이 PopulateModelRequest 메소드를 호출 할 컴파일러에게 있기 때문에

버튼이 WPF

답변

3

먼저, 작성한 코드는 의미가 없으므로 함수 호출 중에 매개 변수를 선언하려고했습니다. 그런 다음 호출 결과 (void이어야 함)를 Action<object> 또는 Action 대리자를 예상하는 생성자에 전달하려고했습니다. 너는 그렇게 할 수 없다.

둘째는 ICommand 인터페이스 Execute 방법은 (당신이 구현하는 정말 무엇이다)과 같다 : 매개 변수는 호출하는 객체에 CommandParameter 속성을 통해 전달되는

void Execute(object parameter) 

(즉, Button). DelegateCommand 개체는 이것을 구현하고 동일한 인수를 사용하여 생성자에 전달 된 대리자를 호출합니다.이 클래스의 일부 버전에서는 간단한 ActionDelegateCommand을 전달하여 parameter을 무시합니다.

그것을 수정하거나 CommandParameterProgramID을 통과하고 이렇게하려면 다음

private void PopulateModelRequest(object parameter) 
{ 
    int programId = (int)parameter; 
} 

또는 무언가 당신이에 액세스 할 수있는 것, 그래서 만약 두 번째는, ProgramId를 통해 폐쇄를 만드는

new DelegateCommand(() => PopulateModelRequest(ProgramId)); 

private void PopulateModelRequest(int programId) 
{ 
} 

같은 그 분야에서 어쨌든을 전달하는 대신 그것을 사용하십시오.

1

그 오류 ModelRequestCommand에 결합되어있다. 메소드를 호출하는 것조차 불가능합니다. 매개 변수의 유형을 지정하기 때문입니다. 매개 변수 유형은 매개 변수 만 예상 할 수 있으므로, 사용자가 근본적으로 잘못하려는 것입니다.

당신이 ModelRequestCommand에 대리자를 지정하려면 다음 코드의 첫 번째 줄과 같이 수행해야합니다

내가 질문을 오해 할 수 있지만의 definetly 당신은을하기에 더 좋을 것

ModelRequestCommand = new DelegateCommand(PopulateModelRequest); 
계속하기 전에 article ablout delegates and events을보십시오.

+1

나는 당신이 생각할 수 없다고 생각합니다. l 함수와 같은 명령 객체 ... 그렇지만, 계속하기 전에 OP가 대리인을 더 잘 이해할 필요가 있다는 것에 진심으로 동의합니다. – BradleyDotNET

+0

@ BradleyDotNET 비록 parantesis가 C# 및 다른 많은 프로그래밍 언어에서 메서드 호출을 표시하므로 가능하지 않더라도 필자는 paranthesis를 추가하여 컴파일러에게 메서드 호출을 원한다고 말했습니다. – meJustAndrew

+0

모든 코드에 동의합니다. ('ModelRequestCommand (ProgramId)')'DelegateCommand'는 WPF에서'ICommand'의 일반적인 구현 인 매우 특정한 객체입니다 – BradleyDotNET

관련 문제