更新:我已深入研究此問題,並發現這是一個Xamarin.Forms問題。C#/ Xamarin:出現/消失事件不會觸發
爲了證明這個問題,我從一個基本的PLC模板創建了以下簡單的Xamarin.Forms應用程序。
我添加了一個新頁面,其中包含簡單的處理程序,用於出現和消失事件。
using System;
using System.Diagnostics;
using Xamarin.Forms;
using Xamarin.Forms.Xaml;
namespace TestApp
{
[XamlCompilation(XamlCompilationOptions.Compile)]
public partial class EventPage : ContentPage
{
public EventPage()
{
InitializeComponent();
Appearing += EventPage_OnAppearing;
Disappearing += EventPage_OnDisappearing;
}
private void EventPage_OnAppearing(object sender, EventArgs e)
{
Debug.WriteLine("Appeared");
}
private void EventPage_OnDisappearing(object sender, EventArgs e)
{
Debug.WriteLine("Disappeared");
}
}
}
然後我加了兩個按鈕,主網頁,其中導航上述網頁兩種不同的方式:
using System;
using Xamarin.Forms;
namespace TestApp
{
public partial class MainPage : ContentPage
{
public MainPage()
{
InitializeComponent();
}
private void WorkingButton_OnClicked(object sender, EventArgs e)
{
Navigation.PushAsync(new EventPage());
}
private void NonWorkingButton_OnClicked(object sender, EventArgs e)
{
Application.Current.MainPage = new EventPage();
}
}
}
觀測和以前一樣,用PushAsync行爲是符合市場預期,但設置根頁面意味着事件不會觸發。
當我重置堆棧使用這條線 await _navigationService.NavigateAsync($"http://app.com/NavigationPage/HomePage/AlertPage");
,所以這個問題似乎並沒有孤立到根頁面,這是在我的真實項目中出現的。
我在當前使用Xamarin Forms v2.3.4.192-pre2和Prism 6.3.0-pre2(Unity)並且在下面的測試應用程序中使用Xamarin Forms 2.3.3.193的項目中遇到過這個問題,棱鏡6.3.0(Dryloc)。我在LG G5上運行Android 7.0。
我不確定這是棱鏡問題還是Xamarin表單問題,因爲我不太確定如何將其重寫爲純粹的表單。
爲了證明這個問題,我做了下面的測試應用程序。
賽事頁面沒有從比EventPage.xaml.cs,在那裏我已經分配基本處理程序的出現和消失事件等基本棱鏡ContentPage模板更改:
using System;
using System.Diagnostics;
using Xamarin.Forms;
namespace PrismErrorDemo.Views
{
public partial class EventPage : ContentPage
{
public EventPage()
{
InitializeComponent();
Appearing += EventPage_OnAppearing;
Disappearing += EventPage_OnDisappearing;
}
private void EventPage_OnAppearing(object sender, EventArgs e)
{
Debug.WriteLine("Appeared");
}
private void EventPage_OnDisappearing(object sender, EventArgs e)
{
Debug.WriteLine("Disappeared");
}
}
}
我的MainPage有兩個簡單的按鈕,其導航到我的EventPage,一個相對和一個絕對。
using System;
using Prism.Commands;
using Prism.Mvvm;
using Prism.Navigation;
namespace PrismErrorDemo.ViewModels
{
public class MainPageViewModel : BindableBase
{
private readonly INavigationService _navigationService;
public DelegateCommand WorkingCommand { get; set; }
public DelegateCommand NonWorkingCommand { get; set; }
public MainPageViewModel(INavigationService navigationService)
{
_navigationService = navigationService;
WorkingCommand = new DelegateCommand(WorkingCommandAction);
NonWorkingCommand = new DelegateCommand(NonWorkingCommandAction);
}
private async void WorkingCommandAction()
{
await _navigationService.NavigateAsync("EventPage");
}
private async void NonWorkingCommandAction()
{
await _navigationService.NavigateAsync("http://app.com/EventPage");
}
}
}
當我使用await _navigationService.NavigateAsync("EventPage");
導航時,事情的行爲與他們應該的完全相同。兩個事件處理程序在它們應該被調用時被調用。
但是,當我瀏覽使用await navigationService.NavigateAsync("http://app.com/EventPage");
我拿到稱爲我瀏覽網頁的露面事件,並使用後退按鈕關閉該應用程序將導致消失的事件被調用。所有其他時間關閉並重新打開應用程序無法調用任一事件。
我在Github問題頁面上找不到任何這方面的參考,並且希望確保在發佈之前我不會漏掉任何明顯的東西。
您是否嘗試過在這裏記錄的錯誤: https://開頭bugzilla.xamarin.com/describecomponents.cgi –