MvvmCross是否支持用于显示警报或弹出窗口的跨平台解决方案?
搜索我找到MvxDialogActivityView
的代码,但它已被注释掉了。现在仍然如此吗?
如果没有直接支持你会怎么建议这样做最好? (也许ViewModel会更改属性并调用FirePropertyChanged
,以便View知道它并显示警告。)
编辑2012年6月16日16:04
我想针对这个具体案例做的事情如下: 在页面上单击一个按钮,这将导致一个方法在ViewModel中运行,该方法进行评估以确定应向客户显示两条消息中的哪一条。该消息将显示为警报或弹出窗口(本机,或最好完全由我设置)。消息将消失(单击“确定”按钮,或最好是3秒)。
消息被解除后,新页面也将被导航(取决于显示的两条消息中的哪一条)。
答案 0 :(得分:11)
如何处理这绝对取决于具体情况 - 没有单一的最佳规则(恕我直言)
对于常规错误显示模式,http://slodge.blogspot.co.uk/2012/05/one-pattern-for-error-handling-in.html
处有一个提案我使用了类似的模式来显示应用程序级别的通知 - 例如当长时间运行的操作完成或聊天消息到达时...或
关于如何显示消息框的一篇有趣的帖子是:http://awkwardcoder.blogspot.co.uk/2012/03/showing-message-box-from-viewmodel-in.html - 我不确定我是否会完全遵循最终解决方案,但对于不该做的事情肯定有一些好处。
对于您的更新方案,我会考虑使用信使(如TinyMessenger)或使用ViewModel公开并由其视图使用的普通C#事件
在页面上单击一个按钮,这将导致方法在ViewModel中运行
我会使用绑定到按钮Click / Tap / TouchDown
的ICommand来实现它进行评估以确定应向客户显示两条消息中的哪一条。
我肯定会在服务中实现逻辑
这将从ViewModel调用 - 结果/决策可能会导致某些属性或私有字段状态更改。
View如何决定显示消息?我可以想到3个选项:
这最后一个选项(Messenging)可能是这里最灵活的解决方案 - 如果您以后决定更改职责,它会分离View和ViewModel。要实现消息传递,可以:
该消息将显示为警告或弹出窗口(本机,或者最好完全由我设置)。
这是一个View关注点 - 因此完全由View项目控制。我使用的控件如:UIAlert,Toast,ToastPrompt等 - 所有这些都可以设置样式
消息将消失(单击“确定”按钮,或最好是3秒)。消息被解除后......
我在View中使用某种形式的Code Behind(或者可能是WP7中的Behavior)。这会检测到click / fade / disappear,然后调用ViewModel上的ICommand(我的首选项)或公共方法
也将导航新页面
将从ViewModel
请求此导航(取决于显示的两条消息中的哪一条)。
通过以上流程很容易跟踪...大概是ViewModel已经知道要显示什么。
这就是我要做的......
...但我确定还有其他选择:)
最后一个注意事项......淡出然后导航逻辑可以通过WP7和Android上的切换/逻辑删除来“搞砸” - 这对于您的特定场景可能或者可能无关紧要。