Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/320.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 进行HUD和触地接触_C#_Ios_Xamarin.ios_Mvvmcross_Mbprogresshud - Fatal编程技术网

C# 进行HUD和触地接触

C# 进行HUD和触地接触,c#,ios,xamarin.ios,mvvmcross,mbprogresshud,C#,Ios,Xamarin.ios,Mvvmcross,Mbprogresshud,我的ViewController像 公共部分类TestView :MvxViewController { …代码在这里。。。 } 我在button event TouchUpInside上加载下一个ViewController,如下所示: btnSearch.TouchUpInside+=(对象发送者,事件参数e)=>{ BTProgressHUD.Show(“测试”); ViewModel.GoParameterizedCommand.Execute(null); }; 该事件在ViewD

我的ViewController像

公共部分类TestView
:MvxViewController
{
…代码在这里。。。
}
我在button event TouchUpInside上加载下一个ViewController,如下所示:

btnSearch.TouchUpInside+=(对象发送者,事件参数e)=>{
BTProgressHUD.Show(“测试”);
ViewModel.GoParameterizedCommand.Execute(null);
};
该事件在ViewDidLoad中定义。我的“测试”消息显示在下一个ViewController上,而不是在加载此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);
    };

但行为是一样的。

似乎您正试图在视图层中使用ProgressHUD。以MVVM方式,您应该在ViewModel中创建一个“加载”属性,并将其绑定到视图中的progressbar。

下面是一段斯图尔特的视频,介绍了如何做到这一点:


下面是示例代码:

我正在我的一个应用程序中执行类似的操作

我在我的
ViewModel
中有一个
IsLoading
属性,我可以设置某个东西是否正在加载。然后在我的
ViewController
中,我订阅了加载
时的更改,如下所示:

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()中执行此操作。您可以在第一个视图中执行类似的操作,然后在第二个视图中,您只需在第一个ViewModel中调用
DismissLoadingDialog()
,或者确保调用
ViewWillEnglish()
ViewDidEnglish()
,因此它被正确地解除。

加载视图控制器所需的时间不会超过“微秒”。 在视图控制器中加载数据需要一些时间,在此期间,您需要显示ProgressHUD

如果您正在“First View Controller”中加载数据,则在开始加载数据时,使用
BTProgressHUD.Show(“测试”)启动ProgressHud并且当数据加载完成时,在导航到“第二视图控制器”之前,从视图中移除该HUD


如果您正在“第二视图控制器”中加载数据,则首先从“第一视图控制器”导航到“第二视图控制器”,然后在第二视图控制器
BTProgressHUD.show(“测试”)中加载数据之前显示HUD并在加载数据后将其删除。

这似乎是一种解决方法,而不是解决方案。我已经测试过了。我已经在调用execute命令时在我的ViemModel上设置了一个属性(就像您发布的github一样)。属性和progressHud设置正确。问题是,等待弹出窗口,它并没有显示在加载过程中,但它的加载时,我回来。(示例视图1->视图2->视图1现在显示在视图1上,而不是在第一次转换期间…)