2

Windows Phoneアプリケーションでは、BookProgressInfoクラスのインスタンスにデータバインドされたカスタムユーザーコントロールがあります。デフォルト以外のコンストラクタを使用してビューモデルの依存関係を挿入する

<deusControls:BookProgressBar BookProgressValue="{Binding BookProgressInfo}" Width="430" /> 

たびBookProgressInfo変更、

static void BookProgressValueChanged(DependencyObject sender, DependencyPropertyChangedEventArgs e) 
     { 
      var bookProgressBar = (BookProgressBar)sender; 

      var progressInfo = (BookProgressInfo) e.NewValue; 

      if(progressInfo != null && progressInfo.Id != 0) 
       bookProgressBar.ProgressBarListBox.DataContext = new BookProgressBarViewModel(progressInfo, bookProgressBar.Width); 
     } 

が呼び出されます。私はbookProgressBar.ProgressBarListBoxに新しいDataContextを設定するたびに、コントロール全体のバウンドプロパティが変更されます。

私は以前はBookProgressBarViewModelを1つしか持っていなかったので、上記のスニペットに実装されているようにすべてうまく動作しました。

今私は別のBookProgressBarViewModelをサポートしたいので、インターフェース - IBookProgressBarViewModelを導入しました。

ご覧のとおり、BookProgressBarViewModelのコンストラクタにはパラメータがあります。

私はIinCコンテナとしてNinjectカーネルを使用しており、App.xamlで起動します。

BookProgressValueChangedのIoCコンテナに対応するIBookProgressBarViewModelのインスタンスを作成するにはどうすればよいですか?

更新:私は依存関係プロパティ変更イベントハンドラ内からパラメータ化されたビューモデルコンストラクタを呼び出す必要がないようにアーキテクチャを変更しました。それでも私はこの質問についてあなたの提案を聞きたいと思います。

+0

私はNinjectがあなたが登録し、必要なパラメータを登録することを可能にすると思います。それとも問題なのですか?私はここでポイントを逃しているかもしれないと思う。 – Vitalij

+0

@Vitalij、 'NinjectModule'では、依存関係のコンストラクタにパラメータを渡したり、メソッドにデリゲートを渡してこれらのパラメータを計算することさえできます。しかし、私の場合、ビューが必要になるまで値は分かりません。これらのインスタンスを前面に生成する方法はありません。しかし、今はクラス 'viewModelParametersProvider'を持つことができ、依存関係が必要なときに、Ninjectモジュールの初期化メソッドからそのルーチンを呼び出すことができると思います。 –

答えて

0

なぜIoCコンテナを使用して、値をレイジーロードするのはなぜですか?その後、IoCは依存関係を注入し、それらのインスタンスを作成し、その値を知るまで、必要に応じてプロパティを更新します。