2013-11-21 12 views
5

我有我的ViewController像ProgressHUD和TouchUpInside

public partial class TestView 
     : MvxViewController 
{ 
...code here... 
} 

和我加载我的下一个视图控制器上的按钮事件TouchUpInside这样的:

btnSearch.TouchUpInside += (object sender, EventArgs e) => { 
     BTProgressHUD.Show("test"); 
     ViewModel.GoParameterizedCommand.Execute(null); 
    }; 

它在viewDidLoad中定义的事件。我的“测试”消息显示在下一个ViewController上,而不是在加载这个消息的时候。我怎么能在加载时显示该消息,而不是当下一个ViewController加载?我曾尝试使用MBProgressHUD

btnSearch.TouchUpInside += (object sender, EventArgs e) => { 
     var hud = new MTMBProgressHUD (View) { 
      LabelText = "Waiting...", 
      RemoveFromSuperViewOnHide = true 
     }; 


     View.AddSubview(hud); 
     hud.Show (animated: true); 

     ViewModel.GoParameterizedCommand.Execute(null); 
    }; 

但行为是一样的。

回答

2

看起来您正尝试在View层中使用ProgressHUD。在MVVM中,您应该在ViewModel中创建一个“加载”属性,并将其绑定到View中的进度条。

这里是一个很好斯图尔特的视频怎么做:http://youtu.be/6fNXGErr9to

这里是示例代码:https://github.com/MvvmCross/NPlus1DaysOfMvvmCross/tree/master/N-34-Progress

+0

这似乎是一种解决方法,而不是解决方案。我已经测试过它。当我调用execute命令时(如在你发布的github中那样),我在ViemModel上设置了一个属性。财产和进步胡德是正确的。问题是,等待弹出它不是在加载过程中显示的,但它在我回来时加载。 (示例视图1 - >视图2 - >视图1现在显示在视图1上,而不是在第一次过渡期间显示...) –

2

我做我的应用程序的一个类似的东西。

我有一个IsLoading属性在我的ViewModel,我设置是否加载和不。然后在我的ViewController我订阅变化对Loading这样的:

ViewModel.WeakSubscribe(() => ViewModel.IsLoading, (sender, args) => 
{ 
    if (ViewModel.IsLoading) 
    { 
     ShowLoadingDialog("Loading Resource"); 
    } 
    else 
    { 
     DismissLoadingDialog(); 
    } 
}); 

void ShowLoadingDialog(string text) 
{ 
    DismissLoadingDialog(); 
    BTProgressHUD.Show(text, -1, BTProgressHUD.MaskType.Black); 
} 

void DismissLoadingDialog() 
{ 
    if (BTProgressHUD.IsVisible) 
     BTProgressHUD.Dismiss(); 
} 

ViewDidLoad()做到这一点。您可以在第一个视图中执行类似操作,然后在第二个视图中,您只需拨打DismissLoadingDialog(),或者只需确保在第一个视图模式中调用ViewWillDisappear()ViewDidDisappear()即可,因此它会被正确解除。

2

加载视图控制器不会再花费更多时间“微秒”。 将数据加载到视图控制器中需要一些时间,在此期间您需要显示该ProgressHUD。

如果您正在'First View Controller'中加载数据,那么在开始加载数据时,启动ProgressHud并使用BTProgressHUD.Show("test");,当您的数据完成加载时,在导航至“第二个视图控制器”之前从视图中删除该HUD。

如果你正在'第二视图控制器'中加载数据,那么首先从'第一视图控制器'导航到'第二视图控制器',然后在加载第二视图控制器BTProgressHUD.Show("test");中的数据之前显示HUD并将其删除数据加载后。

相关问题