私たちの新しいプロジェクトは、ViewModelLocator を使用してビューをビューモデルと結合する View first パターンから始まりました。
ViewModelファーストパターンに変更したいです。
これが私のビューモデルコンストラクターです:
public DeviceSelectionViewModel(IDataModel dataModel, IMessenger messenger)
{
if (dataModel == null) throw new ArgumentNullException("dataModel");
if (messenger == null) throw new ArgumentNullException("messenger");
Selector = new PlantDataTemplateSelector();
PlantSelector = new PlantNodesSelector();
Plants = new List<Plant>(0);
messenger = messenger;
messenger.Register<PlantDataLoadedMessage>(this, m => DispatcherHelper.CheckBeginInvokeOnUI(() => OnPlantDataLoaded(m.Plants)));
RefreshData(_dataModel);
}
最初に ViewModel を使用して適切な ViewModel を選択する方法を次に示します。
public class MainViewModel : Module
{
public MainViewModel()
{
SelectedView = new DeviceSelectionViewModel();
}
public ViewModelBase SelectedView { get; set; }
}
View first では、コードを介して ViewModel を直接呼び出すことはなかったので、Constructor Dependency Injection は正常に機能しました。
コントローラー ViewModel を介して ViewModel を呼び出しているので、ViewModel コンストラクターの 2 つのパラメーターが必要です。
コントローラービューモデルで参照を保持し、コンストラクターに渡すのは適切ですか? このシナリオで DI がどのように機能するかについて、ここで何かが欠けていますか?
私はまだDI(Ninject)とMVVMでピースをまとめているので、親切にしてください:)