c# - 如何避免大量依赖注入到菜单 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();
关于最佳前进方向的任何建议?
解决方案
我可以说我没有亲自尝试过使用 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 {}
推荐阅读
- mongodb - 连接到 mongo db 的 Spring 应用程序问题
- java - 使用 Java Socket 传输图像
- ansible - ansible - 如何将一个简单的角色放入一个文件中(至少对于文档)
- docker - Dockerize pgAdmin - CSRF 令牌不匹配
- c# - 缓冲后的反应式过滤器、拆分和延迟
- neo4j - 子查询中的 Neo4j“变量未定义”错误 - 看不到外部变量
- c# - PasswordBox 左右边框缺失
- python - 如何将字符串分配给空字符串变量
- python - 如何将链接器标志传递给 f2py?
- mysql - 错误代码:1172。结果包含多于一行错误