3

MvvmCross 是否支持显示警报或弹出窗口的跨平台解决方案?

搜索我找到的代码,MvxDialogActivityView但它已被注释掉。现在还会这样吗?

如果没有直接支持,您会建议如何最好地做到这一点?(也许 ViewModel 会更改一个属性并调用FirePropertyChanged,以便 View 知道它并显示警报。)

编辑 2012 年 6 月 16 日 16:04

对于这种特定情况,我尝试做的事情如下:在页面上单击一个按钮,这会导致在 ViewModel 中运行一个方法,该方法进行评估以确定应该向客户显示两条消息中的哪一条。该消息将显示为警报或弹出窗口(本机,或者最好完全由我设计)。消息会在(单击 OK 按钮,或者最好是 3 秒)后消失。

关闭消息后,还将导航一个新页面(取决于显示的两条消息中的哪一条)。

4

1 回答 1

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 公开并由其 View 使用的普通 C# 事件

在页面上单击一个按钮,这会导致一个方法在 ViewModel 中运行

我将使用绑定到按钮 Click/Tap/TouchDown 的 ICommand 来实现这一点

它进行评估以确定应该向客户显示两条消息中的哪一条。

我肯定会在服务中实现逻辑

这将从 ViewModel 调用 - 结果/决定可能会导致某些属性或私有字段状态更改。

然后视图如何决定显示一条消息?我可以想到3个选项:

  1. 视图可以只响应属性更改(正常的 Mvvm INPC)——这将是我的偏好
  2. ViewModel 可以公开它触发的正常 C# 事件...
  3. ViewModel 可以发送消息

最后一个选项(Messenging)可能是这里最灵活的解决方案——它将 View 和 ViewModel 解耦,以防您以后决定更改职责。要实现消息传递,可以:

该消息将显示为警报或弹出窗口(本机,或者最好完全由我设计)。

这是一个 View 问题 - 因此将完全由 View 项目控制。我会使用如下控件:UIAlert、Toast、ToastPrompt 等 - 所有这些都可以设置样式

消息会在(单击 OK 按钮,或者最好是 3 秒)后消失。消息被删除后...

我会在视图中使用某种形式的代码隐藏(或者可能是 WP7 中的行为)。这将检测到点击/淡入淡出/消失,然后调用 ViewModel 上的 ICommand(我的偏好)或公共方法

也将导航一个新页面

将从 ViewModel 请求此导航

(取决于显示的两条消息中的哪一条)。

这将很容易通过上述流程进行跟踪......大概 ViewModel 已经知道要显示什么。


所以这就是我要做的...

  • 它将应用程序流逻辑保留在 ViewModel(及更低版本)中
  • 它将演示文稿保留在视图中

...但我敢肯定还有其他选择:)


最后一点......淡出然后导航逻辑真的会被 WP7 和 Android 上的切换/墓碑“搞砸”——这对于您的特定场景可能很重要,也可能无关紧要。

于 2012-06-17T20:21:05.997 回答