MvvmCross中的警报或弹出窗口

时间:2012-06-15 15:17:13

标签: xamarin.ios xamarin.android mvvmcross

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

搜索我找到MvxDialogActivityView的代码,但它已被注释掉了。现在仍然如此吗?

如果没有直接支持你会怎么建议这样做最好? (也许ViewModel会更改属性并调用FirePropertyChanged,以便View知道它并显示警告。)

编辑2012年6月16日16:04

我想针对这个具体案例做的事情如下: 在页面上单击一个按钮,这将导致一个方法在ViewModel中运行,该方法进行评估以确定应向客户显示两条消息中的哪一条。该消息将显示为警报或弹出窗口(本机,或最好完全由我设置)。消息将消失(单击“确定”按钮,或最好是3秒)。

消息被解除后,新页面也将被导航(取决于显示的两条消息中的哪一条)。

1 个答案:

答案 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个选项:

  1. 视图可以响应属性更改(正常的Mvvm INPC) - 这将是我的偏好
  2. ViewModel可以公开它触发的正常C#事件......
  3. ViewModel可以发送消息
  4. 这最后一个选项(Messenging)可能是这里最灵活的解决方案 - 如果您以后决定更改职责,它会分离View和ViewModel。要实现消息传递,可以:

      

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

    这是一个View关注点 - 因此完全由View项目控制。我使用的控件如:UIAlert,Toast,ToastPrompt等 - 所有这些都可以设置样式

      

    消息将消失(单击“确定”按钮,或最好是3秒)。消息被解除后......

    我在View中使用某种形式的Code Behind(或者可能是WP7中的Behavior)。这会检测到click / fade / disappear,然后调用ViewModel上的ICommand(我的首选项)或公共方法

      

    也将导航新页面

    将从ViewModel

    请求此导航
      

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

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


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

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

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


    最后一个注意事项......淡出然后导航逻辑可以通过WP7和Android上的切换/逻辑删除来“搞砸” - 这对于您的特定场景可能或者可能无关紧要。