2011-07-29 12 views
5

MVVM WP7アプリケーションを使用して、1つのPage/ViewModelから2番目のViewModelのコンストラクタに値を送信しようとしています。静的な値で動作しますが、私はそれがユーザーによって選択された変数である必要がNinject:Implement WithConstructorArgument(文字列名、Func <IContext、オブジェクト>コールバック)

再び
this.Bind<TaskViewModel>().ToSelf().WithConstructorArgument("TaskID", 2690) 

、:私はすでにNinjectを設定し、これは以下のような行を使用して静的テスト値で動作するように持っています。私は、このコールバックは、最初のViewModelに関数を呼び出して値を取得すると思うだろう過負荷

WithConstructorArgument(string name, Func<IContext,object> callback). 

を使用するように言われてきました。

しかし、私は成功しませんでした。私はNinjectまたはFuncコールバック引数のいずれかであまり経験はありません。私は最初のViewModelから値を取得するためにデリゲートと関数を設定しようとしましたが、これは型を渡そうとしているというエラーを返します。コールバックを使用するには、その引数をどのくらい正確に指定する必要がありますか?また、最初のViewModelなどでデリゲートを使用するのは正しいですか?

+1

このように依存性注入を使用することをお勧めしますか?私はユーザーの入力に基づいてコンポーネントの依存関係を解決することを意味しますか? –

+0

私は私の質問に述べたように、私は非常に知っていると思う誰かに私には分かった、私はそうではありません。 MVVMに適合する適切なソリューションがあれば、私のアプローチを変えることは間違いありません。 – Walter

+1

@ Waltedbn:Remo Gloorは、Ninjectプロジェクトの現在アクティブな開発者です。彼は世界で最も話題の人です。彼の言うことを聞きなさい。 – StriplingWarrior

答えて

5

私はあなたの他の投稿にすでに言いましたが、getの引数はおそらくより良い方法です。あなたのブートストラップで(通常はあなたがビジネス価値を持つすべてのものを実装どこよりも別のものでなければなりませんNinjectを使用して、すべてを作成する責任アセンブリ、)を追加実装を工場インターフェース

public interface ITaskViewFactory 
{ 
    TaskViewModel CreateTaskViewModel(int id); 
} 

を作成し、そのため

Public class TaskViewFactory : ITaskViewFactory 
{ 
    Private IKernel kernel; 
    Public TaskViewFactory(IKernel kernel) 
    { 
     this.kernel = kernel; 
    } 

    public TaskViewModel CreateTaskViewModel(int taskId) 
    { 
     this.kernel.Get<ITaskViewModel>(new ConstructorArgument("TaskId", taskId); 
    } 
} 

次に、タスク選択コマンドにファクトリを注入し、タスクが選択されたときにファクトリを呼び出します。

関連する問題