我是WPF应用程序初学者,我目前正在使用MvvmLight作为我的应用程序。
我有一个MainViewModel,它包含一个ObservableCollection的ChildViewModels(类型ViewModelBase)。每个ChildViewModel都绑定到XAML中的选项卡项。所以,我有一个带有标签项的TabControl,每个标签项都有自己的View和ViewModel。
这是我的MainViewModel。现在,我只有一个ChildViewModel,它是DozentViewModel。
public class MainViewModel : ViewModelBase
{
private ObservableCollection<ViewModelBase> _vmCollection;
public ObservableCollection<ViewModelBase> VmCollection
{
get { return _vmCollection; }
set
{
Set(ref _vmCollection, value);
RaisePropertyChanged("VmCollection");
}
}
private DozentViewModel _dozentviewmodel;
public DozentViewModel Dozentviewmodel
{
get { return _dozentviewmodel; }
set
{
Set(ref _dozentviewmodel, value);
}
}
/// <summary>
/// Initializes a new instance of the MainViewModel class.
/// </summary>
public MainViewModel(DozentViewModel dozentViewModel)
{
_dozentviewmodel = dozentViewModel;
VmCollection = new ObservableCollection<ViewModelBase>();
VmCollection.Add(_dozentviewmodel);
}
这是我的ViewModelLocator代码:
public ViewModelLocator()
{
ServiceLocator.SetLocatorProvider(() => SimpleIoc.Default);
SimpleIoc.Default.Register<MainViewModel>();
SimpleIoc.Default.Register<DozentViewModel>();
}
public MainViewModel Main
{
get
{
return ServiceLocator.Current.GetInstance<MainViewModel>();
}
}
public DozentViewModel DozentVM
{
get
{
return ServiceLocator.Current.GetInstance<DozentViewModel>();
}
}
我试图在MainViewModel中使用Constructor Injection来实现依赖注入。上面的代码有效,但我不确定我的DI实现是否正确。我想有一个IChildViewModel接口,我的所有ChildViewModel都将用于该接口。如果我使用这样的界面,我该如何实现DI?