wpf - 在caliburn中使用Screens和IOC的正确方法

标签 wpf caliburn.micro

我想过再次尝试学习 Caliburn。 前几节课很简单,但随着我的进步,事情变得复杂,我无法独自解决。

我设计了一个应用程序,旨在涵盖大多数基础知识,该应用程序具有 Conductor<IScreen> 类型的 ShellViewModel和一些实现 IScreen 的 ChildView我正在使用 IOC 容器来组成应用程序中的 ViewModel 和相关资源。

其中一个 subview 就像一个导航台,用户可以从中访问不同的 subview ,并且这些 subview 还支持导航到一个或两个其他 View 。

当我寻找介绍屏幕和导体概念的示例时,所有这些示例都通过调用ActivateItem(new ChildViewModel())直接创建并激活了 View 模型。 ,可能是为了简单起见,但我很难理解如何将这些 View 模型创建委托(delegate)给 IOC 容器而不依赖于它。

对于至少一两个屏幕,我可以通过构造函数注入(inject),但是当用户可以从任何给定 View 导航到很多 View 并且每个 View 都有自己的附加依赖项时该怎么办?

原谅初学者的愚蠢,有人能指出我正确的方向吗?

最佳答案

您想要使用 View 模型工厂,它依赖于您的 IoC 容器。例如,您的 ShellViewModel 可以采用 IViewModelFactory,它具有 CreateNavigatorViewModel 等方法,返回 NavigatorViewModel(或 INavigatorViewModel),并且此实现使用 IoC 容器来解析 I/NavigatorViewModel。

一些IoC容器支持自动创建这些工厂,例如CaSTLe.Windsor有一个Typed Factory Facility,Ninject有一个创建工厂类型的扩展,你只需定义工厂接口(interface)即可。

关于wpf - 在caliburn中使用Screens和IOC的正确方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11709399/

相关文章:

wpf - 如何将焦点设置在 AND SELECT ALL 初始文本框(MVVM 样式)上?

c# - 如何将 WPF 数据网格内的文本框数据绑定(bind)到 View 模型中的属性?

caliburn.micro - Caliburn 微型 : "children" VM in a main shell VM

c# - 从类库访问日志记录功能

c# - 为什么此 XAML 收到错误 : Items collection must be empty before using ItemsSource

wpf - WPF 用户控件中的键盘输入不会发送到 WinForms 容器

c# - WPF、Caliburn Micro 和 Dapper - Datagrid 复选框绑定(bind)

c# - Caliburn Micro Guard Methods 不评估属性变化

c# - 使用 Caliburn 的 TextboxHelper.ButtonCommand 绑定(bind)

c# - WPF 触发器绑定(bind) : What's the best way to bind an enum value to visiblity?