0

我将视图模型中的文本属性绑定到 App Shell 滑出菜单的 FlyoutHeader 视图

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

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

滑出菜单是否有特定的东西,这意味着一旦加载它,它就不会响应 onpropertychanged ... 而改变?似乎不对

来自 AppShell 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 视图中的按钮导航到“更改位置”页面,调用方式如下

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

在我的调试日志中,我可以看到 LocationsViewModel 中的绑定对象“用户”确实触发了 OnPropertyChanged 以响应在此页面上所做的更改,但随后“返回”并打开弹出菜单没有任何改变,我可以看到 PropertyChanged 没有不为那个观点开火吗?

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

4

1 回答 1

1

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

这样做将解决您的问题

祝你好运!

于 2020-02-07T12:21:46.087 回答