我们的新项目从 View first 模式开始,使用 ViewModelLocator 将视图与视图模型结合起来。
我想更改为 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,我从未通过代码直接调用 ViewModel,因此构造函数依赖注入工作正常。
现在我通过控制器 ViewModel 调用 ViewModel,它需要 ViewModel 构造函数的 2 个参数。
在控制器视图模型中保存引用并将它们传递给构造函数是否正确?我在这里遗漏了一些关于 DI 在这种情况下如何工作的东西?
我仍然将这些部分与 DI(Ninject) 和 MVVM 放在一起,所以请善待:)