【问题标题】:OnAppearing not called in prism xamarin formsOnAppearing 未以 prism xamarin 形式调用
【发布时间】:2021-02-20 20:38:14
【问题描述】:

我希望每次导航到我的视图以刷新列表时调用一个进程。 我正在使用 Xamarin Forms 和 prism 框架。 我从 ContentPage 派生了我的 ViewModel,但从未调用过以下方法:

 protected override void OnAppearing()
    {
        //Do things
    }

我应该怎么做才能参加活动?使用 OnNavigateTo 更好吗?

【问题讨论】:

    标签: xamarin.forms prism


    【解决方案1】:

    通过document

    在您的应用程序中有时您可能想要调用代码 根据页面出现或消失的时间在您的 ViewModel 中 导航具体考虑。在这些时候,您可以利用 IPageLifecycleAware 接口正确响应 Appearing 和 从页面中消失的事件。

    public class ViewAViewModel : IPageLifecycleAware
    {
        public void OnAppearing()
        {
            Console.WriteLine("We are appearing");
        }
    
        public void OnDisappearing()
        {
            Console.WriteLine("We are disappearing");
        }
    }
    

    【讨论】:

    • 没有成功是什么意思?
    • 我的意思是即使我的 viewModel 派生自 IPageLifecycleAware 也不会调用 OnAppearing
    • 有一个sample project可以参考。
    • 我只是比较了我的项目,对我来说看起来我在做同样的事情:在视图中自动装配,派生自 IPageLifecycleAware 并调用 OnAppeating。不知道我错过了什么
    • 它应该可以按照官方文档中的说明进行操作。您可以下载该示例并检查它是否有效。如果它有效,那么您的项目中一定缺少某些东西。
    【解决方案2】:

    我找到了使我的代码工作的解决方案,我在页面后面的代码中添加了这样做:

      protected override void OnAppearing()
        {
            (BindingContext as IPageLifecycleAware)?.OnAppearing();
        }
    

    为什么我需要添加这个仍然是个谜,它不在示例中。

    【讨论】:

    • 请在OnAppearing()中致电base.OnAppearing();
    • 没有 base.OnAppearing() 可访问
    • 这个 OnAppearing() 方法是否覆盖在 ContentPage 中?应该有。
    • 在女巫内容页面?事实上,我的虚拟机声明如下:public class PlantGroupListViewModel : BindableBase, IPageLifecycleAware
    • 如果 OnAppearing 方法在 VM 中,则不应有 override 关键字。参见示例here
    猜你喜欢
    • 1970-01-01
    • 2014-09-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-03-09
    • 1970-01-01
    • 2018-10-19
    • 2019-10-06
    相关资源
    最近更新 更多