MvvmCross:在ViewModel创建后立即显示BTProgressHUD微调器

时间:2014-04-08 07:15:22

标签: xamarin.ios xamarin mvvmcross

我在使用MvvmCross构建的应用中使用BTProgressHUD Xamarin组件。我目前正在开发应用的iOS版本。我的ViewModel会进行多次网络服务调用,并展示一个“IsBusy”'属性,关联视图绑定到的属性,以显示或隐藏进度微调器。这几乎就是在N = 34 MvvmCross样本(https://github.com/MvvmCross/NPlus1DaysOfMvvmCross/tree/master/N-34-Progress)中设置的方式。

问题是,在某些情况下,ViewModel必须在创建后立即自动调用服务。我试图在ViewModel的Start()函数中进行调用,但我注意到BTProgressHUD微调器没有出现在视图的顶部。我怀疑问题是只有在视图可见后才能显示BTProgressHUD,并且当ViewModel.Start()运行时可能不是这种情况。

之前有没有遇到过这个?在视图可见后,是否有一种在ViewModel中运行代码的简单方法?

感谢。

1 个答案:

答案 0 :(得分:0)

  

在视图可见后,是否有一种在ViewModel中运行代码的简单方法?

N = 42视频 - http://slodge.blogspot.co.uk/2013/11/n42-is-my-viewmodel-visible-can-i-kill.html - 引入了IVisible界面,您可以将其添加到ViewModel - 您的工作是从View调用 - 但是这在每个平台上都很容易做到。例如,在iOS上,使用https://github.com/MvvmCross/NPlus1DaysOfMvvmCross/blob/master/N-42-Lifecycles/Lifecycle.Touch/Views/FirstView.cs中的ViewDidAppear / ViewDidDisappear

完成
    protected IVisible VisibleViewModel
    {
        get { return base.ViewModel as IVisible; }
    }

    public override void ViewDidAppear(bool animated)
    {
        base.ViewDidAppear(animated);
        VisibleViewModel.IsVisible(true);
    }

    public override void ViewDidDisappear(bool animated)
    {
        base.ViewDidDisappear(animated);
        VisibleViewModel.IsVisible(false);
    }