我的ViewController就像
一样public partial class TestView
: MvxViewController
{
...code here...
}
然后在按钮事件TouchUpInside上加载我的下一个ViewController:
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);
};
但行为也一样。
答案 0 :(得分:2)
您似乎正在尝试在View图层中使用ProgressHUD。在MVVM方式中,您应该在ViewModel中创建一个“加载”属性,并将其绑定到View中的进度条
这是一个很好的斯图尔特视频如何做到这一点:http://youtu.be/6fNXGErr9to
以下是示例代码:https://github.com/MvvmCross/NPlus1DaysOfMvvmCross/tree/master/N-34-Progress
答案 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()
或者只是确保在第一个ViewModel中调用ViewWillDisappear()
或ViewDidDisappear()
,这样就会被解雇正确。
答案 2 :(得分:2)
加载视图控制器不会超过'Micro Seconds'。 在视图控制器中加载数据需要一些时间,在此期间您需要显示ProgressHUD。
如果要在“First View Controller”中加载数据,那么在开始加载数据时,使用BTProgressHUD.Show("test");
启动ProgressHud,并在数据完成后,在导航到“第二个视图控制器”之前从视图中删除该HUD
如果您要在“第二视图控制器”中加载数据,则首先从“第一视图控制器”导航到“第二视图控制器”,然后在第二视图控制器BTProgressHUD.Show("test");
中加载数据之前显示HUD并在加载数据后将其删除。