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

はエラーがなく、うまくいきますが、パラメータ(int ProgramID)を実装モデルリクエストに渡したいとします。プログラムIDはパラメータを持つ関数delegateコマンド

this.ProgramId = ProgramID; 

によって定義され、私はどのように私はこれについて行かない

ModelRequestCommand = new DelegateCommand(PopulateModelRequest(int ProgramID); 

を行おうとするとエラーになりますか?

ボタンをクリックすると、この

PopulateModelRequest(int ProgramID) 

のような方法にparantesisを追加するときに、ちょうどあなたがPopulateModelRequestメソッドを呼び出したいコンパイラに伝えるためでエラーがあるWPF

答えて

3

最初に書いたコードはナンセンスでしたが、関数呼び出し中にパラメータを宣言しようとしました。次に、その呼び出しの結果(voidだったはずです)を、Action<object>またはおそらくActionデリゲートを想定するコンストラクタに渡そうとしました。あなたはそれをすることはできません。パラメータは、呼び出し元のオブジェクトのプロパティCommandParameter(すなわち、Button)を介して渡され

void Execute(object parameter) 

第二に、(あなたが実装しているものは本当にある)ICommandインタフェースExecute方法は、次のようになります。 DelegateCommandオブジェクトはこれを実装し、同じ引数を使ってコンストラクタに渡されたデリゲートを呼び出します(そのクラスのいくつかのバージョンではActionDelegateCommandはあなたのためにparameterを無視します)。あなたがアクセス権を持っているかのよう

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

か何か

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

private void PopulateModelRequest(int programId) 
{ 
} 

状の第2は、プログラムIDの上にクロージャを作成している: CommandParameterProgramIDを渡し、これを行うのいずれか、それを修正する

そのフィールドあなたの方法ではの代わりにそれを使用してください。

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'は、' ICommand'のジェネリック実装であるWPFの非常に固有のオブジェクトです。 – BradleyDotNET

関連する問題