mvvmcross登录viewmodel-viewcontroller通信

时间:2013-10-23 13:17:37

标签: xamarin.ios mvvmcross

我在我的项目中使用Mvvmcross crosscore

我正在尝试将loginviewmodel绑定到loginviewcontroller

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

如何将此信息传达给loginviewcontroller ---关于登录状态和登录错误信息(如果有的话)

我可以访问loginviewcontroller中的viewmodel datacontext吗?如何 ?

在viewmodel中回传任何项目的最佳方法是什么(我基本上是指所有非UI用户绑定项目)

2 个答案:

答案 0 :(得分:1)

解决视图模型相互依赖性的最佳方法之一是使用MessageBus / Event Aggregator模式使用松散耦合的approch。有一个plugin for MvvmCross。或者你可以使用优秀的TinyMessenger

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

答案 1 :(得分:1)

  

我在我的项目中使用Mvvmcross crosscore

我假设您遵循CrossLight样本N = 39。

  

我可以访问loginviewcontroller中的viewmodel datacontext吗?如何 ?

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

    public object DataContext
    {
        get { return BindingContext.DataContext; }
        set { BindingContext.DataContext = value; }
    }

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

http://mvvmcross.wordpress.com

上提供了完整的N + 1视频索引

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