Xamarin.Forms 中的适当 Page.Loaded 事件

Proper Page.Loaded event in Xamarin.Forms

在过去的 2 个月里,我一直在孜孜不倦地寻找一种方法来在使用 Xamarin.Forms 时实现适当的 Page.Loaded 事件,但我无法实现或找不到实现它的方法。

大多数人建议覆盖 Page.OnAppearing 或为 Page.Appearing 添加事件处理程序,这两者都不是答案或实现预期效果的正确方法,并且事件不会像真正的Page.Loaded 事件会。

我想了解以下内容:

编辑:

我所说的“正确的 Page.Loaded”事件是指:

目前Xamarin.Forms不提供proper/complete生命周期事件来满足所有特定要求,但情况正在改善,开发团队目前正在努力解决这个问题,如下所述官方 GitHub Repos 上的问题和最近的拉取请求(您可以关注,获得想法并可能在他们发布之前自己实施),他们肯定会提供未来,虽然还不清楚什么时候准备好。

1.Why不加载ContentPageconstructor中的data/controls? constructor 方法仅调用一次,在 Page.OnAppearing.

之前也被调用

Can I implement it from the native side?

是的,我想你可以。

在 iOS 中,覆盖自定义渲染器中的 ViewDidLoad 方法:

[assembly:ExportRenderer (typeof(ContentPage), typeof(MyPageRenderer))]
namespace App487.iOS
{
    public class MyPageRenderer : PageRenderer
    {

        protected override void OnElementChanged(VisualElementChangedEventArgs e)
        {
            base.OnElementChanged(e);
        }
        public override void ViewDidLoad()
        {
            base.ViewDidLoad();
            //call before ViewWillAppear and only called once
        }

        public override void ViewWillAppear(bool animated)
        {
            base.ViewWillAppear(animated);
        }
    }
}

在Android中,尝试覆盖OnAttachedToWindow方法:

[assembly: ExportRenderer(typeof(ContentPage), typeof(MyPageRenderer))]
namespace App487.Droid
{
    public class MyPageRenderer : PageRenderer
    {
        public MyPageRenderer(Context context) : base(context)
        {
        }

        protected override void OnElementChanged(ElementChangedEventArgs<Page> e)
        {
            base.OnElementChanged(e);
        }

        protected override void OnAttachedToWindow()
        {
            base.OnAttachedToWindow();
        }
    }
}