在app OnResume中刷新viewmodel

时间:2018-02-21 06:23:27

标签: xamarin.forms

我有一个Xamarin Forms应用程序,后面有一些页面和相关的视图模型。在OnAppearing的页面上,它将绑定上下文设置为视图模型。视图模型调用web api来检索数据。 当应用程序进入休眠状态并再次被调用时,我使用App类和messagecenter中的OnResume事件来发送消息。在页面的OnAppearing中,我订阅了消息并将绑定上下文设置为新的viewmodel。在OnDisapearing中,我取消订阅邮件以防止它在页面不可见时接收事件(另一页可见)。

有没有办法从页面调用连接绑定上下文的方法?或者是否只能通过再次设置页面绑定上下文来刷新信息?

1 个答案:

答案 0 :(得分:0)

BindingContext事件中设置OnAppearing,每次导航或返回ViewModel时都会重新分配Page(取决于平台)。通常在构造函数中设置ViewModel一次。

关于MessagingCenter。在OnPause之前会有OnDisappearing个事件。因此,您将取消订阅该邮件,并且很可能在OnResume之后不再收到该邮件。

除此之外,还有与OnAppearingOnDisappearing相关的平台特定行为。幸运的是,documentation也涵盖了例外情况。

我不确定我是否完全理解您的问题,但是,您可以通过下一条BindingContext上的Page来调用方法:

public partial class MyPage : Page
{
    public MyPage()
    {
        this.BindingContext = new MyViewModel();
    }

    protected override void OnAppearing()
    {
        (this.BindingContext as MyViewModel)?.MyMethod();
    }
}