【发布时间】:2021-06-15 21:00:39
【问题描述】:
我偶然发现了一个问题,我在 CM 的官方文档中没有找到解决方案。 我们的应用程序看起来类似于此图像:
在搜索 StackOverflow 时,我找到了使用 Conductor<object>.Collection.AllActive 类 (more active screens / views in shell caliburn micro or another MVVM framework) 执行此类操作的解决方案。我遇到的最大问题是,我找不到使用工厂进行依赖注入的方法。 ShellViewModel 的构造函数目前看起来是这样的。
public ShellViewModel(
Func<FooterViewModel> footerViewModelFactory,
Func<LoginViewModel> loginViewModelFactory)
{
this.ActivateItemAsync(loginViewModelFactory);
this.ActivateItemAsync(footerViewModelFactory);
}
显然这不起作用,因为ContentControl不能显示工厂,需要一个Screen。但是我如何首先设法将对象绑定到 shell,同时仍然保持依赖注入的特性?否则,一个简单的解决方法就是为 ViewModels 创建一个新实例并传递所有参数,这在我看来是非常肮脏的。
【问题讨论】:
-
你在正确的方向上只是 ContentControl 一次只能显示一件事。 ItemsControl 如何...由于您使用的是
Conductor<>.Collection,因此您只需绑定ItemsControl'sItemsSource 集合。您可以考虑使用 TabControl,而不是 itemscontrol。我假设ShellViewModel : Conductor<IScreen>.Collection.AllActive
标签: c# mvvm dependency-injection caliburn.micro