是什么决定了NavigationCommands.BrowseBack是否调用了页面构造函数?

我有两个页面,其中有类似的逻辑。 加载页面,单击将显示/隐藏其他按钮的一些按钮,继续下一页。 当我点击下一页时,如果单击后退按钮,我将返回上一页。

不同之处在于,当我单击后退按钮时,一个页面(FirstPage)将调用构造函数,后面的按钮会调用重置默认值。 另一个页面(SecondPage)没有得到调用的构造函数,我不知道为什么。

public FirstPage() { InitializeComponent(); DisplayStuff(); } 

FirstPage将KeepAlive设置为False

 public SecondPage(object arg1, object arg2) { InitializeComponent(); DisplayStuff(arg1, arg2); } 

此页面还将KeepAlive设置为False 。 这两个页面不会inheritance任何内容,也没有任何内容覆盖任何属性。 我能看到的唯一区别是空构造函数,所以我尝试给SecondPage一个空构造函数,但仍然没有运气。

我对WPF比较新(我每6个月工作一到两个小时),所以我错过了什么?

如果相关,这是后退按钮。

 

编辑:当我单击后退按钮时,SecondPage不保持其状态。 它只是加载一个空页面,因为还没有调用DisplayStuff

导航代码:

 NavigateTo(new SecondPage(arg1, arg2)); protected void NavigateTo(Page page) { NavigationService.Navigate(page); } 

我创建了一个类似的示例应用程序并具有类似的行 我发现当你回到页面时,除非页面是日志中的第一页,否则不会调用构造函数

在WPF中导航中阅读本节:

使用日志导航页面页面时,会执行以下步骤:

  1. 页面(后堆栈上的顶级日记帐分录)已实例化。

  2. 页面将使用与页面的日记帐分录一起存储的状态进行刷新。

  3. 页面导航回。

祝好运!

在阅读了Paul Stovell关于WPF导航的文章后 ,我想要显示内容的方式无法发挥作用。

导航时,如果单击“返回”,WPF可能无法知道要传递给构造函数的值; 因此它必须保持页面活着。 这是跟踪输出:

由于WPF无法调用构造函数,因此不会。 它只会让页面保持活力。

他继续提到如果你不通过URI导航KeepAlive不起作用,每次都调用LoadedUnloaded ,所以我可以把我所有的逻辑移到那里,我不需要调用构造函数后面的导航。