Я использую свое первое приложение, использующее Xamarin, и у меня возникают трудности с навигацией по страницам. Исследовал в разных местах и добился успеха, когда впервые использовал навигацию.
Но когда я добавил кнопку, вызывается построитель страниц, по которому нужно перемещаться, но не открывается ни одна страница. Когда я нажимаю кнопку, с которой я когда-либо работал (список в соответствии с распечаткой ниже), она идет, но я замечаю, что нажатие аппаратной кнопки Windows Phone на устройстве нажимает первую ошибку, т.е. это должна быть другая страница в стеке. Не знаю как решить, так как в этом вторая кнопка работает отлично а вот первую не могу решить и не найти в чем может быть проблема.
Используйте проект Windows Phone для тестирования и использования сообщества Visual Studio 2015.
Скриншот кнопок:
MainViewModel.cs, где находится команда настройки отрисовки навигации по нажатию на кнопки:
private readonly INavigationService _navigationService;
public MainViewModel()
{
RescisaoCommand = new Command(NavigateToRescisao);
FGTSCommand = new Command(NavigateToFGTS);
_navigationService = DependencyService.Get<INavigationService>();
}
private async void NavigateToRescisao()
{
await _navigationService.NavigateToRescisao();
}
private async void NavigateToFGTS()
{
await _navigationService.NavigateToFGTS();
}
Конструктор App.cs:
public App()
{
DependencyService.Register<IMessageService, MessageService>();
DependencyService.Register<INavigationService, NavigationService>();
// The root page of your application
MainPage = new NavigationPage(new MainView());
}
Интерфейс INavigationService.cs:
public interface INavigationService
{
Task NavigateToRescisao();
Task NavigateToFGTS();
}
NavigationService.cs:
public class NavigationService : INavigationService
{
public async Task NavigateToRescisao()
{
await App.Current.MainPage.Navigation.PushAsync(new RescisaoView());
}
public async Task NavigateToFGTS()
{
await App.Current.MainPage.Navigation.PushAsync(new FGTSView());
}
}
Конструктор FGTSViewModel.cs (работает):
public FGTSViewModel()
{
CalculateFgtsCommand = new Command(x => { ShowResult(); });
_messageService = DependencyService.Get<IMessageService>();
//_navigationService = DependencyService.Get<INavigationService>();
}
Конструктор RescisaoViewModel.cs (не работает):
public RescisaoViewModel()
{
Reasons = new List<string>();
TypesOfNotice = new List<string>();
Reasons.Add("Pedido de demissão");
Reasons.Add("Justa causa");
Reasons.Add("Sem justa causa");
Reasons.Add("Término de contrato de experiência");
TypesOfNotice.Add("Trabalhado");
TypesOfNotice.Add("Indenizado");
//_navigationService = DependencyService.Get<INavigationService>();
}