MvvmCross中的警报或弹出窗口

Jas*_*ele 3 xamarin.ios xamarin.android mvvmcross

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

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

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

编辑2012年6月16日16:04

我试图为这一特定情况下做的是如下:在网页上的按钮被点击,这将导致在其中做一个评估,以确定哪两个消息应该显示给用户的视图模型运行的方法.该消息将显示为警报或弹出窗口(本机,或最好完全由我设置).消息将消失(单击"确定"按钮,或最好是3秒).

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

Stu*_*art 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#事件并由其View使用

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

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

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

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

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

View如何决定显示消息?我可以想到3个选项:

  1. View可以只响应一个Property更改(正常的Mvvm INPC) - 这将是我的偏好
  2. ViewModel可以暴露它触发的正常C#事件......
  3. ViewModel可以发送消息

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

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

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

消息将消失(单击"确定"按钮,或最好是3秒).消息被删除后......

我在View中使用某种形式的Code Behind(或者可能是WP7中的Behavior).这将检测单击/淡入/消失,然后在ViewModel上调用ICommand(我的首选项)或公共方法

还将导航新页面

将从ViewModel请求此导航

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

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


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

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

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


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