MVVM:GUI 和 ViewModel 之间的真正分离
MVVM: True seperation between GUI and ViewModels
我正在寻找 MVVM View 和 ViewModel 之间 TRUE 的良好 example/way 分离。我什至不想在 View 中引用 1 个 ViewModel 或其他方式。
问题描述
只是为了形象化我的问题:
想象一下 3 个独立的项目; GUI(视图)、逻辑(视图模型)和模型。
概览:
如何设置解决方案,使其不会产生循环引用?
接近
我的一个想法是使用第四个项目作为某种经纪人:
我不喜欢的是,在这种情况下,Logic(ViewModel) 项目将是主要项目。或者也许还好,我只是有种奇怪的感觉。
大家怎么看?
编辑
感谢 Charles Mager,我找到了一篇非常有趣的文章,其中预定义了一个映射,因此当他调用 ShowDialog 方法时,它会根据 UI 加载的映射来决定。
CodeProject: Showing Dialogs When Using the MVVM Pattern
如果您在 View 和 ViewModel 之间没有一个引用,那么为什么您的 ViewModels 项目试图引用 Views 项目?
您的图片暗示这是为了允许显示对话框。在这种情况下,您通常会在 ViewModels 项目中定义一个接口,该接口具有方法 ShowDialog(object viewModel)
- 将其称为 IDialogService
或其他名称。
然后您将拥有第 4 个 bootstrapper 项目,它将负责启动应用程序,显示主要 Window 并将实现此 IDialogService
,将 ViewModel 映射到视图并显示它。
VM 了解 View 更值得怀疑,你应该避免它。您可能希望在 View 项目中实现对话框功能。仅仅因为它的逻辑并不意味着 VM 应该负责它。如果您让视图模型强制执行 ShowDialog()
之类的方法,那么您可能应该重构 VM 并将 ShowDialog()
方法调用拉入 View 库。如果您必须使用 VM 触发它,请在 ViewModel 上定义方法委托以使其触发,但将 ShowDialog()
分配给视图层中的该委托。
我正在寻找 MVVM View 和 ViewModel 之间 TRUE 的良好 example/way 分离。我什至不想在 View 中引用 1 个 ViewModel 或其他方式。
问题描述
只是为了形象化我的问题: 想象一下 3 个独立的项目; GUI(视图)、逻辑(视图模型)和模型。
概览:
如何设置解决方案,使其不会产生循环引用?
接近
我的一个想法是使用第四个项目作为某种经纪人:
我不喜欢的是,在这种情况下,Logic(ViewModel) 项目将是主要项目。或者也许还好,我只是有种奇怪的感觉。
大家怎么看?
编辑
感谢 Charles Mager,我找到了一篇非常有趣的文章,其中预定义了一个映射,因此当他调用 ShowDialog 方法时,它会根据 UI 加载的映射来决定。 CodeProject: Showing Dialogs When Using the MVVM Pattern
如果您在 View 和 ViewModel 之间没有一个引用,那么为什么您的 ViewModels 项目试图引用 Views 项目?
您的图片暗示这是为了允许显示对话框。在这种情况下,您通常会在 ViewModels 项目中定义一个接口,该接口具有方法 ShowDialog(object viewModel)
- 将其称为 IDialogService
或其他名称。
然后您将拥有第 4 个 bootstrapper 项目,它将负责启动应用程序,显示主要 Window 并将实现此 IDialogService
,将 ViewModel 映射到视图并显示它。
VM 了解 View 更值得怀疑,你应该避免它。您可能希望在 View 项目中实现对话框功能。仅仅因为它的逻辑并不意味着 VM 应该负责它。如果您让视图模型强制执行 ShowDialog()
之类的方法,那么您可能应该重构 VM 并将 ShowDialog()
方法调用拉入 View 库。如果您必须使用 VM 触发它,请在 ViewModel 上定义方法委托以使其触发,但将 ShowDialog()
分配给视图层中的该委托。