c# – 对话窗口MVVM方式
我们在桌面
WPF世界.让我们想象下面的场景(?用户故事).
窗口A是用于在数据库中添加或编辑实体A的对话窗口.其中一个字段是对其他实体的引用.为方便用户,有“添加实体B”按钮. 当用户按下此按钮时,窗口B正在显示,它提供类似的角色 – 添加或编辑实体B.当用户按下OK时,实体被添加到数据库并返回,这样它可以被窗口A用来设置它自动在某些领域. 现在让我们讨论技术问题. WindowA由WindowAViewModel支持.按下按钮会调用WindowAViewModel.CreateBEntity方法.然后什么? >我不能简单地创建Window B的实例,因为这将创建从WindowAViewModel到WindowB的依赖,这是我不想做的事情. 解决这个问题的正确方法是什么? 编辑:Another question讨论了类似的问题.但是,我有一些可能的解决方案,可能有效也可能无效,我想知道它们是否可以使用(因为在讨论的问题中提出的解决方案对我来说似乎有些过分). 解决方法
在
caliburn.micro世界中,您可以使用IWindowManager.ShowDialog(ModelView)执行此操作.
使用IoC,在Bootstrapper中将WindowManager注入IWindowManager,并将IWindowManager添加到ViewModel构造函数中.手中有IWindowManager,请调用ShowDialog. 代码示例: public class AppBootstrapper : BootstrapperBase { // ... protected override void Configure() { container.Singleton<IWindowManager,WindowManager>(); } } public class CallingViewModel { private readonly IWindowManager windowManager; public CallingViewModel(IWindowManager windowManager) { this.windowManager = windowManager; } public Method() { var called = new CalledViewModel(); var result = windowManager.ShowDialog(called); // handle result } } public class CalledViewModel : Screen { public void Ok() { TryClose(true); } public void Cancel() { TryClose(false); } } (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |