首页 > 解决方案 > 如何避免大量依赖注入到菜单 ViewModel

问题描述

我正在使用 WPF RibbonMenu,它将按住按钮来启动多个工具。大概有50个或更多。当从 RibbonMenu 中选择一个工具时,它会在我的 AvalonDock 布局中创建一个新选项卡。

我正在使用 ViewModel-First MVVM 模式,我目前的工作方式是将每个工具ViewModel(到目前为止我只添加了两个)注入到 RibbonMenu 中ViewModel,因此它可以添加到ObservableCollection绑定到 AvalonDock 的经理。

这很好用,但这意味着将每个工具ViewModel(50+)注入ViewModel似乎不正确的功能区菜单。我假设每次注入都会使用内存,无论用户是否使用它?

类似的帖子如何避免依赖注入构造函数疯狂?有答案说构造函数中的大量注入意味着该类做的太多,需要分解。

ViewModel但是,在我的 RibbonMenu需要一个单曲的情况下,这是如何实现的?

编辑

我正在尝试决定是在 RibbonMenu 中使用 IoCViewModel并进行大量注入(50+),还是仅忽略此 ViewModel 的 IoC 并在 ViewModel 中创建新的依赖实例。例如,每个按钮都会触发一个包含以下内容的方法:

HomeViewModel homeViewModel = new HomeViewModel();

关于最佳前进方向的任何建议?

标签: c#wpfdependency-injectioninversion-of-controlviewmodel

解决方案


我可以说我没有亲自尝试过使用 aRibbonMenu但是您可以将 ViewModel 列表注入到构造函数中吗?就像是

//Initialize ObservableCollection
public ObservableCollection<IRibbonItemViewModel> RibbonItems = new ObservableCollection<IRibbonItemViewModel>();

//Constructor<>
HomeViewModel homeViewModel = new HomeViewModel(List<IRibbonItemViewModel> ribbonViewModels)
{
   foreach(var vm in ribbonViewModels)
   {
       RibbonItems.Add(vm);
   }
}

确保所有的 ViewModel 都实现IRibbonItemViewModel 了简单的接口

public interface IRibbonItemViewModel {}

推荐阅读