Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/symfony/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mvvm 使用弹出对话框和Prism4掌握详细信息_Mvvm_Prism - Fatal编程技术网

Mvvm 使用弹出对话框和Prism4掌握详细信息

Mvvm 使用弹出对话框和Prism4掌握详细信息,mvvm,prism,Mvvm,Prism,有人问过这个问题的不同版本,但我不认为它是重复的。我正在用C#/Prism4构建一个LOB应用程序,我正试图从第一天开始就正确使用该体系结构。该应用程序(最终)将有相当多的主/详细屏幕以及带有可编辑嵌入式网格的编辑屏幕。例如:通过弹出屏幕显示具有添加或编辑功能的用户列表 目前,我认为一个简单的解决方案是将对话框作为隐藏面板数据绑定到同一个viewmodel,其可见性由数据绑定控制。要编辑用户(使用上面的示例),请复制要编辑的数据,然后将IsInEditMode标志设置为true以显示对话框。然后

有人问过这个问题的不同版本,但我不认为它是重复的。我正在用C#/Prism4构建一个LOB应用程序,我正试图从第一天开始就正确使用该体系结构。该应用程序(最终)将有相当多的主/详细屏幕以及带有可编辑嵌入式网格的编辑屏幕。例如:通过弹出屏幕显示具有添加或编辑功能的用户列表

目前,我认为一个简单的解决方案是将对话框作为隐藏面板数据绑定到同一个viewmodel,其可见性由数据绑定控制。要编辑用户(使用上面的示例),请复制要编辑的数据,然后将IsInEditMode标志设置为true以显示对话框。然后,正常命令可以捕获“保存”/“取消”按钮以更新模型(或不更新)

虽然这听起来很容易实现,但感觉有点错误。关注点是分离的,感觉就像viewmodel被多路复用一样

我遇到过Prism InteractionRequest指南,但它似乎更适合于简单的弹出窗口(“您确定要取消吗?”)

我需要一个可扩展到数十个屏幕的解决方案。它必须简单且易于维护


提前感谢。

通常的方法是使用一个所谓的对话服务,其界面如下所示:

public interface IDialogService
{        
    bool? ShowDialog<TViewModel>(TViewModel viewModel);
}
公共接口IDialogService
{        
bool?显示对话框(TViewModel viewModel);
}

无论何时需要显示对话框,都可以调用ShowDialog方法传递对话框的视图模型。剩下的就交给服务部了。它可以显示隐藏的面板、真实的对话框窗口或弹出窗口-这取决于实现,而调用方对此一无所知。

我不同意您的对话框总是有自己的VM,调用方可以传递自己的DataContext,这就是您不必注意同步脉泽/子视图模型的方式,它与关注点的分离无关。例如,您有一个用户配置文件表单(maser),并且有一个模式对话框地址-如果您在对话框关闭后传递配置文件的vm,则与地址相关的属性和视图字段将自动更新(享受绑定)

在我看来,主细节应该有自己的视图(如果细节是多个模型对象的话,可能需要VM部分)

也就是说,我肯定会使用PopupRegionBehavior,这是Prism 2.2的RI的一部分。这对于该场景特别有用,因为它允许您在特定区域中注册master details视图(如果您决定将细节拉入Shell,这仍然有效)


有很多人在谈论这件事。

谢谢。Prism4 doco涵盖交互服务或交互请求的使用,这是其首选实现。话虽如此,它似乎更多地基于简单的交互,比如弹出“是/否”对话框。我想我更关心的是如何最好地建立一个真正的对话,交流很多领域。它是否值得拥有自己的视图和视图模型,或者我可以将其安装到拥有的V/VM中?考虑到这一点,我打算使用一个单独的V和VM—它更具可扩展性,并降低了巨大的、无法维护的文件的风险。它绝对值得拥有自己的视图和视图模型。对话框是一个不同的屏幕,它应该有自己的视图模型。这也鼓励更好地分离关注点。