关于xamarin.ios:mvvmcross登录viewmodel-viewcontroller通信

mvvmcross login viewmodel-viewcontroller communciation

我在我的项目中使用 Mvvmcross 交叉核

我正在尝试将我的 loginviewmodel 绑定到 loginviewcontroller

我为登录按钮绑定了一个命令。应用程序一直等待,直到它获得登录响应,该响应存储在 loginViewModel 本身中..

我如何将这个信息传达给 loginviewcontroller --- 关于登录状态和登录错误信息(如果有)

我可以访问我的 loginviewcontroller 中的 viewmodel 数据上下文吗???如何 ?

将视图模型中的任何项目返回通信的最佳方法是什么(我基本上是指所有非 UI 绑定项目)


I am using Mvvmcross crosscore in my project

我由此假设您遵循 CrossLight 示例 N=39。

Can I access the viewmodel datacontext inside my loginviewcontroller ??? and how ?

如果您关注了 N=39。然后您可以使用名为 DataContext 的属性访问 DataContext - 请参阅 https://github.com/MvvmCross/NPlus1DaysOfMvvmCross/blob/master/N-39-CrossLight-Touch/CrossLightTouch/MyViewController.cs#L33

1
2
3
4
5
    public object DataContext
    {
        get { return BindingContext.DataContext; }
        set { BindingContext.DataContext = value; }
    }

除此之外,N 1 个视频中还有许多其他示例演示了如何在 ViewModel 和 View 之间进行通信,包括错误消息和加载对话框 - 例如。 N=34 显示了进度对话框的一种实现 - https://github.com/MvvmCross/NPlus1DaysOfMvvmCross/tree/master/N-34-Progress

N 1 个视频的完整索引可在 http://mvvmcross.wordpress.com

上找到

显然,并非所有这些都适合您的 CrossLight 开发方法,但在这里您可以允许您的自定义 mvvm 方法填补空白 - 它是您在自定义框架中编写的代码。


解决视图模型相互依赖关系的最佳方法之一是使用 MessageBus/Event Aggregator 模式的松散耦合方法。 MvvmCross 有一个插件。或者您可以使用出色的 TinyMessenger。

原则上,当使用这种方法时,您不再在任意通知的发布者和消费者之间建立硬引用。相反,通知会在消息总线上发布,每个人都可以自由收听和订阅。