C# 无法在Template10中导航回

C# 无法在Template10中导航回,c#,xaml,navigation,template10,C#,Xaml,Navigation,Template10,我正试图从这个辅助页面导航回我的主页。我试图使用NavigationService.GoBack(),但我得到了NullReferenceException 我没有更改viewmodel中的任何内容。我打算首先将用户输入保存到SQLite中,然后导航回主页 这是我从DetailPage.xaml.cs private SQLiteService database = new SQLiteService(); DetailPageViewModel vm = new DetailP

我正试图从这个辅助页面导航回我的主页。我试图使用
NavigationService.GoBack()
,但我得到了
NullReferenceException

我没有更改viewmodel中的任何内容。我打算首先将用户输入保存到SQLite中,然后导航回主页

这是我从
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);
    }
    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();
    }
以下是
DetailPageViewModel.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);
    }
    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();
    }
SQLiteService数据库=新的SQLiteService();
公共详细信息页面视图模型()
{
if(Windows.ApplicationModel.DesignMode.DesignModeEnabled)
{
Value=“设计时间值”;
}
}
私有字符串_Value=“默认”;
公共字符串值{get{return{u Value;}set{set(ref{u Value,Value);}}
NavigatedToAsync上的公共重写异步任务(对象参数、NavigationMode模式、IDictionary状态)
{
Value=(state.ContainsKey(nameof(Value))?state[nameof(Value)]?.ToString():参数?.ToString();
等待任务。完成任务;
}
NavigatedFromAsync上的公共重写异步任务(IDictionary pageState,bool挂起)
{
如果(暂停)
{
pageState[名称(值)]=值;
}
等待任务。完成任务;
}
NavigatingFromAsync上的公共重写异步任务(NavigatingEventArgs args args)
{
args.Cancel=false;
等待任务。完成任务;
}
public void GotoMainPage()=>
NavigationService.GoBack();
public void ProcessData(字符串名称、int类型、int类型)
{
AddNewItem(\u名称,\u摄取,\u类型);
GotoMainPage();
}
旁注:我试图使用
vm.GotoMainPage()
Detail.xaml.cs
访问
GotoMainPage
,但它仍然返回异常
  • 要在不同页面之间导航,请使用
    框架。导航
    方法
  • 到称为Mainpage的xaml页面的页面导航示例如下:
    this.Frame.Navigage(typeof(Mainpage))
  • 有关更多信息,请参阅文档:


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

    哪一行代码引发了空引用异常?导航服务是否为空?this.Frame.Navigage(typeof(Mainpage))@格伦·托马斯我从
    NavigationService.GoBack()
    @MatthiasHerrmann那里得到了一个例外,它实际上已经起作用了,谢谢。@MatthiasHerrmann介意你把它变成答案吗?所以我会投票表决