我一直在想把“你确定吗?”放在哪里?在我的 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/