Невозможно вернуться назад в Template10

Я пытаюсь вернуться на главную страницу с этой вторичной страницы. Я пытался использовать NavigationService.GoBack(), но получил NullReferenceException.

Я ничего не менял в модели представления. Я намеревался сначала сохранить пользовательский ввод в SQLite, а затем вернуться к MainPage.

Вот мой код от DetailPage.xaml.cs

    private SQLiteService database = new SQLiteService();
    DetailPageViewModel vm = new DetailPageViewModel();

    public DetailPage()
    {
        InitializeComponent();
        NavigationCacheMode = NavigationCacheMode.Disabled;
    }

    private void yesButton_Click(object sender, Windows.UI.Xaml.RoutedEventArgs e)
    {            
        var _name = Name.Text;
        var _uptake = UptakeTime.SelectedIndex + 1; // database index Morning start at 1
        var _intake = int.Parse(Intake.Text);

        vm.ProcessData(_name, _intake, _uptake);
    }

Вот DetailPageViewModel.cs

    SQLiteService database = new SQLiteService();

    public DetailPageViewModel()
    {
        if (Windows.ApplicationModel.DesignMode.DesignModeEnabled)
        {
            Value = "Designtime value";
        }
    }

    private string _Value = "Default";
    public string Value { get { return _Value; } set { Set(ref _Value, value); } }

    public override async Task OnNavigatedToAsync(object parameter, NavigationMode mode, IDictionary<string, object> state)
    {
        Value = (state.ContainsKey(nameof(Value))) ? state[nameof(Value)]?.ToString() : parameter?.ToString();
        await Task.CompletedTask;
    }

    public override async Task OnNavigatedFromAsync(IDictionary<string, object> pageState, bool suspending)
    {
        if (suspending)
        {
            pageState[nameof(Value)] = Value;
        }
        await Task.CompletedTask;
    }

    public override async Task OnNavigatingFromAsync(NavigatingEventArgs args)
    {
        args.Cancel = false;
        await Task.CompletedTask;
    }

    public void GotoMainPage() =>
        NavigationService.GoBack();    

    public void ProcessData(string _name, int _type, int _uptake)
    {
        database.AddNewItem(_name, _uptake, _type);
        GotoMainPage();
    }

Примечание: я пытался получить доступ к GotoMainPage из Detail.xaml.cs с помощью vm.GotoMainPage(), но все равно возвращал исключение


person Muhamad Iqbal    schedule 15.04.2016    source источник
comment
Какая строка кода вызвала исключение нулевой ссылки? Является ли служба навигации нулевой?   -  person Glen Thomas    schedule 15.04.2016
comment
this.Frame.Navigage(typeof(Mainpage));   -  person Matthias Herrmann    schedule 15.04.2016
comment
@GlenThomas Я получил исключение от NavigationService.GoBack()   -  person Muhamad Iqbal    schedule 16.04.2016
comment
@MatthiasHerrmann это действительно сработало, спасибо.   -  person Muhamad Iqbal    schedule 16.04.2016
comment
@MatthiasHerrmann возражаете, если вы превратите это в ответ? Так что я буду голосовать за это   -  person Muhamad Iqbal    schedule 17.08.2016


Ответы (1)


  • Для перехода между разными страницами используйте метод Frame.Navigate.
  • Пример перехода страницы на страницу xaml с именем Mainpage: this.Frame.Navigage(typeof(Mainpage));

Для получения дополнительной информации см. документацию: Frame.Navigate

Используемое пространство имен называется System.Windows.Controls.

person Matthias Herrmann    schedule 24.08.2016