【问题标题】:Alerts or Popups in MvvmCrossMvvmCross 中的警报或弹出窗口
【发布时间】:2012-06-15 15:17:13
【问题描述】:

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

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

如果没有直接的支持,您认为最好怎么做? (也许 ViewModel 会更改一个属性并调用 FirePropertyChanged 以便 View 知道它并显示警报。)

2012 年 6 月 16 日 16:04 编辑

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

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

【问题讨论】:

  • 我认为这取决于具体情况。你能提供更多信息吗?
  • 对于一般的错误显示模式,slodge.blogspot.co.uk/2012/05/… 有一个建议(它是从这里某处的答案复制而来的 - 现在找不到!) - 但是还有更多您正在寻找的东西为了?
  • 嗨 Stuart,我已经将问题更新为更具体一点...并纠正了 v 的过多 :)
  • 这听起来更像是敬酒......几秒钟后淡入然后淡出......

标签: xamarin.ios xamarin.android mvvmcross


【解决方案1】:

如何处理这绝对取决于情况 - 没有单一的最佳规则(恕我直言)

对于一般错误显示模式,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 可以发送消息

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

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

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

消息会在(单击确定按钮,或者最好是 3 秒)后消失。消息被关闭后...

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

也将导航一个新页面

将从 ViewModel 请求此导航

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

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


这就是我要做的...

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

...但我确信还有其他选择:)


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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-11-16
    • 1970-01-01
    • 1970-01-01
    • 2019-05-15
    相关资源
    最近更新 更多