所以我有2个观点。我在view1中做我做的事情,数据是绑定。当我点击按钮我去view2,我做我做的,然后回到view1。当然在InitializeComponent();
后面的view1代码中并设置视图DataContext = IocContainer.StaticContainer.Resolve<MediaViewModel>();
所以每次我回到view1时都会调用viewModel的构造函数并创建新对象(所以我会丢失一些数据)。如何不在navigateBack上调用conscructor来查看或不再次初始化新对象?
答案 0 :(得分:3)
如果要在导航期间保持页面状态,则需要设置Page.NavigationCacheMode。这会将前一个实例保留在内存中,并在导航回来时使用它。
默认情况下,在UWP中,当您转到下一个导航时,导航始终会丢弃当前页面。当您返回时,它会重新创建整个页面,包括数据上下文和该页面所需的任何其他数据元素。这样做确实会降低内存使用率。
请注意,因为您保留在内存中的每个页面都会在您的应用中占用更多内存。
在构造函数中执行此操作的代码:
public MyPage()
{
// Page cached if the cache size of the parent Frame is large enough
NavigationCacheMode = NavigationCacheMode.Enabled;
// Or, page is always cached
NavigationCacheMode = NavigationCacheMode.Required;
}