Xamarin Forms App Shell OnPropertyChanged 未更新 FlyoutHeader 视图

Xamarin Forms App Shell OnPropertyChanged not updating for FlyoutHeader view

我正在将视图模型中的文本 属性 绑定到应用程序的 FlyoutHeader 视图中 Shell 滑出菜单

应用程序初始化时所有更新事件都会正确触发,但是用户可能会访问一个页面来更新他们的信息

我遇到的问题是,当您导航到此页面并执行更新时,FlyoutHeader 视图没有更新以响应视图模型

是否有特定于滑出菜单的东西,这意味着一旦加载它,它就不会响应 on属性changed ... 而改变?好像不太对

来自应用程序Shell xaml

<Shell.FlyoutHeader>
    <views:FlyoutHeader />
</Shell.FlyoutHeader>

来自Flyoutheader背后的代码

    private LocationsViewModel _vm;

    public FlyoutHeader()
    {
        InitializeComponent();

        this.BindingContext = new LocationsViewModel();
    }

    protected override void OnBindingContextChanged()

    {

        _vm = BindingContext as LocationsViewModel;


        _vm.PropertyChanged += _vm_PropertyChanged;

        _vm.SetUserLocation();

    }

用户通过 FlyoutHeader 视图中的按钮导航到 'change location' 页面,调用方式如下

            await Shell.Current.GoToAsync("changelocation");

在我的调试日志中,我可以看到 LocationsViewModel 中的绑定对象 'user' 确实会触发 OnPropertyChanged 以响应在此页面上所做的更改,但随后 'back' 并打开弹出菜单什么也没有已更改,我可以看到 PropertyChanged 没有针对该视图触发?

我认为 OnPropertyChanged 绑定的全部意义在于即使加载了视图也会发生更新以导致视图响应?

这个问题基本上是因为您正在创建同一个 ViewModel 的多个实例,所以问题是您试图更改绑定到 ViewModel 中的 属性 的 header,这然后绑定到您的视图,因此为了让您的视图反映您在 ViewModel 中所做的更改,如果有意义的话,它应该具有绑定到它的 ViewModel 的实例!

这样做可以解决您的问题

祝你好运!