【问题标题】:MvvmCross: Display a BTProgressHUD spinner immediately after ViewModel creationMvvmCross:在 ViewModel 创建后立即显示一个 BTProgressHUD 微调器
【发布时间】:2014-04-08 07:15:22
【问题描述】:

我在使用 MvvmCross 构建的应用程序中使用 BTProgressHUD Xamarin 组件。我目前正在开发应用程序的 iOS 版本。我的 ViewModel 进行了几次 Web 服务调用并公开了关联视图绑定到的“IsBusy”属性,以显示或隐藏进度微调器。这与 N=34 MvvmCross 示例 (https://github.com/MvvmCross/NPlus1DaysOfMvvmCross/tree/master/N-34-Progress) 中的设置方式差不多。

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

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

谢谢。

【问题讨论】:

    标签: xamarin.ios xamarin mvvmcross


    【解决方案1】:

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

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

        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);
        }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-05-18
      • 1970-01-01
      • 2023-03-24
      • 2018-07-31
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多