如何解决当导航页面 2 中的某些数据发生更改时,如何刷新 HomePageViewModel 上的绑定
我在 HomePageViewModel 中从 Page2 使用了一些属性,当我导航到 Page2 时,我更改了该属性,然后通过执行 NavigiationPop 返回。
HomePage 根本没有重新加载/刷新,因为我在 HomePage 的构造函数中设置了 BindingContext,它只加载一次。
对我有用的解决方案是 在“onAppearing()”上将 BindingContext 设置为 ViewModel,通常不考虑最佳实践。但我还需要刷新我在 Page2 上更改的值。
期待您的宝贵意见和建议。
在 OnAppearing 中设置 BindingContext 的优点/缺点。
谢谢,
曼特
解决方法
看你自己,都能达到效果。
但是如果你想降低程序的CPU消耗,那么就不要过多的使用onAppearing
方法来刷新页面数据。
另一种方法是您可以通过Delegate/Event/MessageCenter更改模型的数据。
您可以参考this discussion了解如何使用Delegate/Event/MessageCenter。
在这里,我将通过使用MessageCenter 来提供示例。
例如TestViewModel如下:
public class TestViewModel : INotifyPropertyChanged
{
public event PropertyChangedEventHandler PropertyChanged;
protected virtual void NotifyPropertyChanged([CallerMemberName] string propertyName = "")
{
PropertyChanged?.Invoke(this,new PropertyChangedEventArgs(propertyName));
}
private string pagetitle;
public string PageTitle
{
get
{
return pagetitle;
}
set
{
if (pagetitle != value)
{
pagetitle = value;
NotifyPropertyChanged();
}
}
}
}
然后在FirstPage中如下绑定,在里面订阅MessageCenter:
TestViewModel testViewModel = new TestViewModel();
BindingContext = testViewModel;
MessagingCenter.Subscribe<object>(this,"Hi",(sender) =>
{
// Do something whenever the "Hi" message is received
testViewModel.PageTitle = "Modified Title";
});
然后在SecondPage中,通过发送消息更改数据时。返回首页后,视图将更新。
private void Button_Clicked(object sender,EventArgs e)
{
MessagingCenter.Send<object>(this,"Hi");
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。