如何在ContentPage完成加载时收到通知

时间:2017-10-27 19:39:33

标签: c# xaml xamarin

我有一些XAML ContentPages,它们上面有ContentView对象。因此,通常我会根据this.Width和this.Height,在ContentPage中设置的值来调整这些对象的大小。但是,如果在ContentPage加载后没有显式调用我的ContentView对象,则Width和Height值为null,因为尚未设置值。

我想弄清楚的是,我怎么能告诉我的ContentViews在获取宽度和高度值之前等到ContentPage完成加载?

2 个答案:

答案 0 :(得分:2)

我找到了另一种解决方法,它正在Xamarin Forms 4.8中工作:

private bool isStarted = false;
protected override void LayoutChildren(double x, double y, double width, double height)
{
    base.LayoutChildren(x, y, width, height);
    if (!isStarted)
    {
        isStarted = true;
        // do something

    }
}

答案 1 :(得分:0)

Xamarin.Forms提供了两个生命周期类型的事件:

  1. OnAppearing
  2. OnDisappearing
  3. 可以在Page子类中重写。

    现在事实上,OnAppearing将在屏幕出现之前执行,当你想要一个需要在屏幕出现后立即执行的Loaded事件时,有一个解决方法。

    解决方法

    1. 在viewmodel中创建一个属性,如下所示。
    2. private bool _toggleTemp;
      public bool ToggleTemp
      {
          get => _toggleTemp;
          set => SetProperty(ref _toggleTemp, value);
      }
      
      1. 将以下行添加到构造函数的最后一行。 LoadingVm.ToggleTemp = true;
      2. 在屏幕上添加一个Switch,并将IsVisible设为false,如下所示。 (仅用于演示目的)
      3. <Switch IsToggled="{Binding ToggleTemp}" Toggled="Switch_OnToggled" IsVisible="False" />
        
        1. 现在,您可以在Switch_OnToggled的Page Loaded中编写要编写的代码。
        2. private async void Switch_OnToggled(object sender, ToggledEventArgs e)
          { 
              /* Your code goes here... */ 
          }
          

          如果您有任何疑问,请告诉我