Wpf Mvvm:ChildViewModels和依赖注入的ObservableCollection

时间:2017-12-05 11:31:31

标签: wpf mvvm dependency-injection simpleioc

我是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?

0 个答案:

没有答案