我有一个Xamarin Forms应用程序,后面有一些页面和相关的视图模型。在OnAppearing的页面上,它将绑定上下文设置为视图模型。视图模型调用web api来检索数据。 当应用程序进入休眠状态并再次被调用时,我使用App类和messagecenter中的OnResume事件来发送消息。在页面的OnAppearing中,我订阅了消息并将绑定上下文设置为新的viewmodel。在OnDisapearing中,我取消订阅邮件以防止它在页面不可见时接收事件(另一页可见)。
有没有办法从页面调用连接绑定上下文的方法?或者是否只能通过再次设置页面绑定上下文来刷新信息?
答案 0 :(得分:0)
在BindingContext
事件中设置OnAppearing
,每次导航或返回ViewModel
时都会重新分配Page
(取决于平台)。通常在构造函数中设置ViewModel
一次。
关于MessagingCenter
。在OnPause
之前会有OnDisappearing
个事件。因此,您将取消订阅该邮件,并且很可能在OnResume
之后不再收到该邮件。
除此之外,还有与OnAppearing
和OnDisappearing
相关的平台特定行为。幸运的是,documentation也涵盖了例外情况。
我不确定我是否完全理解您的问题,但是,您可以通过下一条BindingContext
上的Page
来调用方法:
public partial class MyPage : Page
{
public MyPage()
{
this.BindingContext = new MyViewModel();
}
protected override void OnAppearing()
{
(this.BindingContext as MyViewModel)?.MyMethod();
}
}