C# 进行HUD和触地接触
我的ViewController像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
公共部分类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上,而不是在第一次转换期间…)