【问题标题】:Cannot navigate back in Template10无法在 Template10 中导航回来
【发布时间】:2016-04-15 15:28:06
【问题描述】:

我正在尝试从该辅助页面导航回我的 MainPage。我尝试使用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();
    }

旁注:我尝试使用vm.GotoMainPage()Detail.xaml.cs 访问GotoMainPage,但它仍然返回异常

【问题讨论】:

  • 哪一行代码抛出了空引用异常?导航服务是否为空?
  • this.Frame.Navigage(typeof(Mainpage));
  • @GlenThomas 我收到了来自NavigationService.GoBack()的异常
  • @MatthiasHerrmann 它确实有效,谢谢。
  • @MatthiasHerrmann 介意您是否将其作为答案?所以我会对此投票

标签: c# xaml navigation template10


【解决方案1】:
  • 要在不同页面之间导航,请使用Frame.Navigate 方法。
  • 页面导航到名为 Mainpage 的 xaml 页面的示例如下: this.Frame.Navigage(typeof(Mainpage));

有关更多信息,请查看文档:Frame.Navigate

正在使用的命名空间称为System.Windows.Controls

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-04-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-09-15
    相关资源
    最近更新 更多