向后导航后如何刷新页面。未将OnAppearing称为

时间:2019-06-11 17:07:45

标签: c# xamarin.forms navigation back

在我的主页上,我加载当前元素并显示诸如卡片之类的数据。 用户可以使用PushAsync导航到详细信息或编辑页面并更新数据。

从导航栏返回不会调用OnAppearing,因此我无法刷新地图(设置位置)。

方法如下所示: MainPage> DetailPage> EditPage

public MainPage()
{
  InitializeComponent();

  SetLocation();
}

protected override async void OnAppearing()
{
  base.OnAppearing();

  var vm = BindingContext as MainViewModel;
  await vm?.InitializeAsync(null);

  SetLocation();
}

void SetLocation()
{
  try {
    var location = (BindingContext as MainViewModel).Location;

    if (location == null) {
      location = DataObjects.Location.Parse(AppSettings.Current.FallbackMapsLocation);
    }

    var initialPosition = new Position(
        location.Latitude,
        location.Longitude);

    var mapSpan = MapSpan.FromCenterAndRadius(
        initialPosition,
        Distance.FromMiles(1.0));

    Map.MoveToRegion(mapSpan);
  }
  catch (FeatureNotSupportedException) {
  }
}

在EditPage中,我浏览了两次(DetailPage,然后是MainPage)。 我的对象本身是最新的,并通过OnPropertyChanged获取更改,因此我也具有当前位置。

我应该使用MessagingCenter还是有其他/更好的选择? Xamarin Forms版本是4.0,我使用shell

1 个答案:

答案 0 :(得分:1)

如果导航来自下一页,如果您想触发一些命令,则可以尝试使用事件。

首先,在您的DetailPage中定义一个事件:

public delegate void UpdateLocation(string info);
public event UpdateLocation UpdateLocationEvent;

然后在按下时注册此事件:

var detailPage = new DetailPage(new DetailViewModel(item));
detailPage.UpdateLocationEvent += (info) =>
{

};
await Navigation.PushAsync(detailPage);

最后,您可以调用此事件来触发MainPage中的代码块。即在详细信息页面的消失事件中:

protected override void OnDisappearing()
{
    base.OnDisappearing();

    UpdateLocationEvent?.Invoke("location info");
}