在我的主页上,我加载当前元素并显示诸如卡片之类的数据。 用户可以使用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
答案 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");
}