我正在尝试在发出网络请求时显示加载屏幕。我有一个LoginViewModel,我已经定义了一个属性IsLoading。现在当它改变时我想显示活动指标。我想在这里使用BTProgressHUD。虽然我已经能够使用ViewModel绑定我的控件但是我无法将BTProgressHUD绑定为show或hide。以下是我如何绑定其他控件:
var set = this.CreateBindingSet<LoginView, LoginViewModel>();
set.Bind(txtUser).To(vm => vm.Username);
set.Bind(txtPassword).To(vm => vm.Password);
set.Bind(btnLogin).To(vm => vm.LoginCommand);
set.Apply();
我已经尝试过BTProgressHUD,但它不起作用:
set.Bind(BTProgressHUD.Show()).To(vm => vm.IsLoading);
我无法编译,因为我收到Bind函数的错误。是否可以创建一个与ViewModel中的属性绑定的闭包(如在iOS中),并且属性的任何更改都可以在View中执行某些操作?
答案 0 :(得分:0)
我假设您的LoginCommand调用登录函数。在该功能中,您应该呼叫BTProgressHUD.Show()
,然后是您的登录过程。
您应该将登录过程包装在try
/ catch
和finally
中,您应该致电BTProgressHUD.Dismiss()
。
这样做的好处是无需在所有平台上重复代码。
另外,您可以创建视图模型继承的BaseViewModel
,为其提供IsLoading
属性,并设置BTProgressHUD.Show()
和BTProgressHUD.Dismiss()
。调用。
private bool _isLoading = false;
public virtual bool IsLoading
{
get { return _isLoading; }
set
{
SetProperty(ref _isLoading, value);
if (value)
BTProgressHUD.Show();
else BTProgressHUD.Dismiss();
}
}