我正在将视图模型中的文本属性绑定到 App Shell 滑出菜单的浮出控件标题视图中
初始化应用时,所有更新事件都会正确触发,但是用户可能会转到一个页面来更新其信息
我遇到的问题是,当您导航到此页面并执行更新时,FlyoutHeader 视图不会更新以响应视图模型
滑出菜单是否有特定的东西,这意味着一旦加载它,它就不会响应 onpropertychanged 而改变......?似乎不对
来自 AppShell xaml
<Shell.FlyoutHeader>
<views:FlyoutHeader />
</Shell.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();
}
用户通过浮出控件页视图中的按钮导航到"更改位置"页,如下所示
await Shell.Current.GoToAsync("changelocation");
在我的调试日志中,我可以看到 LocationsViewModel 中的绑定对象"user"确实触发了 OnPropertyChanged 以响应此页面上所做的更改,但随后转到"返回"并打开弹出菜单没有任何变化,我可以看到 PropertyChanged 没有为该视图触发?
我认为 OnPropertyChanged 绑定的全部意义在于即使加载了视图,也会发生更新以导致视图响应?
问题基本上是因为您正在创建同一视图模型的多个实例,所以问题是您正在尝试更改绑定到 ViewModel 中的属性的标头,然后绑定到您的视图,因此,为了使您的视图反映您在 ViewModel 中所做的更改,如果有意义的话,它应该具有绑定到它的 ViewModel 实例!
这样做将解决您的问题
祝你好运!