c# - "Are you sure?"提示。 ViewModel 的一部分还是纯粹的 View ?

标签 c# wpf mvvm

我一直在想把“你确定吗?”放在哪里?在我的 MVVM WPF 应用程序中键入提示。

我倾向于认为这些纯粹是 View 的一部分。如果 ViewModel 公开了一个 DeleteCommand,那么我希望该命令立即删除。

要将此类提示集成到 ViewModel 中,它必须公开一个单独的 RequestDeleteCommand,一个用于绑定(bind)提示的 DeletePromptItem 属性,它也可以兼作触发以显示提示。

即便如此,也没有什么可以阻止直接调用 DeleteCommand 的单元测试,除非我在 ViewModel 中放入特定逻辑以要求 DeletePromptItem 匹配作为参数提供的项目到 DeleteCommand

然而,这一切对我来说就像是 ViewModel 中的噪音。提示更像是一个用户界面问题,以防止误点击等。对我来说,这表明它应该在 View 中,并带有调用 DeleteCommand 的确认提示。

有什么想法吗?

最佳答案

提示 绝对不应该是 ViewModel 的一部分,但这并不一定意味着最好的解决方案是在 View 中对它们进行硬编码(尽管这是一种非常合理的第一种方法)。

据我所知,有两种替代方法可以减少 View 和 ViewModel 之间的耦合:使用交互服务和触发交互请求。两个都解释的很好here ;你可能想看看。

一般的想法是抽象异步交互是如何完成的,并使用更类似于基于事件的逻辑的东西同时允许 ViewModel 表达它想要与用户交互作为一个操作;最终结果是您可以记录此交互并对其进行单元测试。

编辑:我应该补充一点,我已经探索过在原型(prototype)项目中使用 Prism 4 处理交互请求,我对结果非常满意(有一些框架您甚至可以完全在 XAML 中指定特定交互请求将发生什么!)。

关于c# - "Are you sure?"提示。 ViewModel 的一部分还是纯粹的 View ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10227007/

相关文章:

c# - 如何为DataGridCheckBoxColumn创建通用编辑样式?

c# - Parallel.ForEach 与 Task.Run 和 Task.WhenAll

c# - 填充下拉列表的最快方法

c# - 如何在两个字符串数组上使用 Linq 或 lambda 操作获取不匹配位置

javascript - Kendo MVVM Grid 将所有页面导出为 pdf

android - 无法使用数据绑定(bind) Android 从 ViewModel 与 XML 通信

mvvm - 如何使用silverlight将xaml中的drageventArgs作为命令参数进行引用

c# - 在从池中获取连接之前经过的超时时间

c# - 我可以使用什么 WPF 方法在控件的第一个显示上设置一些属性?

wpf - 在客户端计算机上调试 WPF