ProgressHUD和TouchUpInside

时间:2013-11-21 10:29:38

标签: c# ios xamarin.ios mvvmcross mbprogresshud

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

但行为也一样。

3 个答案:

答案 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并在加载数据后将其删除。