显示mvvmcross

时间:2018-01-20 11:17:40

标签: c# xamarin.ios mvvmcross xamarin-studio uiactivityindicatorview

我正在尝试在发出网络请求时显示加载屏幕。我有一个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中执行某些操作?

1 个答案:

答案 0 :(得分:0)

我假设您的LoginCommand调用登录函数。在该功能中,您应该呼叫BTProgressHUD.Show(),然后是您的登录过程。

您应该将登录过程包装在try / catchfinally中,您应该致电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();
    }
}