C# 遍历树时超出了逻辑树深度

C# 遍历树时超出了逻辑树深度,c#,.net,wpf,navigation,C#,.net,Wpf,Navigation,我目前正在构建一个WPF应用程序,从我的页面导航回主窗口时遇到问题 我可以导航回以前的页面(Q2到Q1,compiledpage到Q1/Q2),但不能导航到主窗口本身 MainWindow.xaml.cs(窗口) Q1.xaml.cs(第页) Q2.xaml.cs(第页) compiledpage.xaml.cs(第页) private void backButton_单击(对象发送方,路由目标) { 主窗口pg=新的主窗口(); var window=(MainWindow)Applicati

我目前正在构建一个WPF应用程序,从我的页面导航回主窗口时遇到问题

我可以导航回以前的页面(Q2到Q1,compiledpage到Q1/Q2),但不能导航到主窗口本身

MainWindow.xaml.cs(窗口)

Q1.xaml.cs(第页)

Q2.xaml.cs(第页)

compiledpage.xaml.cs(第页)

private void backButton_单击(对象发送方,路由目标)
{
主窗口pg=新的主窗口();
var window=(MainWindow)Application.Current.MainWindow;

window.Content=pg;//实现导航的一种非常常用的方法是首先使用viewmodel。使用与viewmodel数据类型关联的datatemplates从viewmodel中创建模板。您应该能够通过谷歌搜索许多示例,但这里有一个我编写的示例,谢谢。如果我只是构建一个需要在视图之间进行简单导航的小WPF应用程序,请我应该实现MVVM吗?或者这是过火了吗?另外,如果我要实现MVVM,或者我应该使用Caliburn Micro/MVVM light这样的MVVM框架,或者按照您的例子就足够了吗?如果可能的话,我真的希望使用最简单、最不复杂的方法。我更喜欢mvvmlight而不是Caliburn Micro,在这里,事物会通过约定神秘地连接起来数据模板化非常简单,只需在xaml的几行中将viewmodel类型与视图关联起来,这一部分就完成了。绑定命令可能有点冗长,但您可以直接复制粘贴
private void startTroubleshootButton_Clicknew(object sender, RoutedEventArgs e)
{
    // instantiate the Q1 page and assign it to "pg1" variable
    Q1 pg1 = new Q1();

    // Sets the current content control view to Q1 page
    this.Content = pg1;
}
private void naviQ2ButtonClick(object sender, RoutedEventArgs e)
{
     // instantiate mainwindow and store it in the window variable
     var window = (MainWindow)Application.Current.MainWindow;

     // instantiate Q2 page and pass the string variable "sb" as arguments to Q2 page/class
     Q2 pg2 = new Q2(sb.ToString());

     // set the current content control to Q2 page
     window.Content = pg2;
}
private void compileButtonClick(object sender, RoutedEventArgs e)
{
    // instantiate mainwindow and store it in the window variable
    var window = (MainWindow)Application.Current.MainWindow;

    // instantiate  compiledpage and pass the string variable "sb" and valueFromQ1 as arguments to compiledpage/class
    Compiledpage pg3 = new Compiledpage(sb.ToString(), valueFromQ1); 

    // Show compiledpage in the current window
    window.Content = pg3;
}
private void backButton_Click(object sender, RoutedEventArgs e)
{
    MainWindow pg = new MainWindow();
    var window = (MainWindow)Application.Current.MainWindow;
    window.Content = pg;  //<- this doesn't work
}