我可以绑定到Xamarin形式的全局文件吗?

时间:2019-03-11 21:17:14

标签: data-binding xamarin.forms

我想在大多数ContentPage所包含的自定义视图中显示当前用户。登录后,当前我将当前用户作为属性存储在App实例中。尝试仅在构造函数中更新Label在生命周期中为时过早。

Xamarin Forms是否可以绑定到该对象,或者以其他方式让当前用户在我的自定义视图中更新Label?我正在将Xamarin.Forms 3.5与标准MVVM一起使用。

1 个答案:

答案 0 :(得分:1)

您可以采用多种方法,但是简短的答案是,您需要在全局(静态)变量和视图之间放置一些东西,以使事情顺利进行。您的视图模型上的属性必须是非静态属性。

但是,它可以有一个自定义实现,以便getter从某个全局位置检索值,在您的情况下,您可能不需要setter。您唯一需要做的另一件事情就是告诉视图模型在用户信息可用时触发PropertyChanged事件,然后您可以使用从Label到视图模型的标准绑定。

假设您有一些CurrentUser静态类,其成员如下:

public static class CurrentUser
{
    public event Action OnLogin;   // login code needs to fire this on login
    public string Username { get; set; }
    // etc.
}

然后视图模型将通过执行类似的操作来实现这一点:

class UserViewModel : INotifyPropertyChanged
{

    public UserViewModel()
    {
        CurrentUser.OnLogin += CurrentUser_Login;
    }

    private void CurrentUser_Login()
    {
        PropertyChanged?.Invoke(nameof(Username));
    }

    public string Username {
        get {
            return CurrentUser.Username;
        }
    }

    // etc.
}

然后,该视图将使用<Label Text="{Binding Username}" . . .>,然后在触发OnLogin时,将使用新的用户名自动更新所有视图。