data-binding - 我可以绑定(bind)到 Xamarin Forms 中的全局内容吗?

标签 data-binding xamarin.forms

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

Xamarin Forms 是否有办法绑定(bind)到这个对象或以其他方式让当前用户更新我的自定义 View 中的标签?我正在使用 Xamarin.Forms 3.5 和标准 MVVM。

最佳答案

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

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

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

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

然后 View 模型会通过做类似的事情来连接到它:

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.
}

然后 View 将使用 <Label Text="{Binding Username}" . . .>然后当 OnLogin 被触发时,所有 View 将自动更新为新用户名。

关于data-binding - 我可以绑定(bind)到 Xamarin Forms 中的全局内容吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55110544/

相关文章:

c# - 现在我不再需要显式订阅 property-changed-event,我可以简化这个 iOS 渲染器吗

javascript - 从 $on 调用时数据绑定(bind)不更新

c# - 获取部分属性(property)的逻辑。好的做法?

design-patterns - 数据绑定(bind)作为一种设计模式

java - 根据 boolean 值 JavaFX 更改标签

c# - Xamarin Xaml 和多目标

wpf - 有没有办法将 xaml.cs 中公共(public)方法的结果绑定(bind)到 xaml 中的控件?

c# - 如何让异步任务等待结果以进行进一步操作xamarin表单?

Xamarin Forms - IOS 支持的最低版本

xamarin.forms - 导航栏中的 Xamarin Forms 标题转换