gpt4 book ai didi

wpf - 在 Windows 8 应用程序中离开 XAML 页面时,XAML 对象是否实际上保持存在?

转载 作者:行者123 更新时间:2023-12-02 03:47:13 25 4
gpt4 key购买 nike

我使用 MVVM Light Toolkit 来定义 View 模型和 View 之间的关联。

容器被指示将 View 模型注册为单例实例。因此,当需要 GagaViewModel 时,将始终返回相同的实例:

public GagaViewModel GagaViewModel
{
get
{
var vm = ServiceLocator.Current.GetInstance<GagaViewModel>();
vm.Setup(); //Clear the ObservableCollection
return vm;
}
}

您可以单击 PriorGaga.xml 上的缩略图项目。然后在Gaga.xaml中的GridView“MyGridView”中选择自选项。 Gaga.xaml 代码隐藏文件:

protected override async void LoadState(Object navigationParameter, Dictionary<String, Object> pageState)
{
var itemId = navigationParameter as String;
if (String.IsNullOrEmpty(itemId))
{
throw new ArgumentException("navigationParameter was either null or empty");
}

await ((GagaViewModel)DataContext).Init(itemId); //Busy(-Indicator) while loading data from server, filling the ObservableCollection and writing the selected item down

BringItemIntoView();
}

private void BringItemIntoView()
{
var vm = (GagaViewModel)DataContext;

Dispatcher.RunAsync(CoreDispatcherPriority.Normal,
() => MyGridView.ScrollIntoView(vm.SelectedItem));
}

这很好用。作为示例:项目 #45 立即出现在视口(viewport)中(正确的视口(viewport)位置从一开始)。

但是当您单击后退按钮并通过选择任意缩略图项目(假设为 #29)返回 Gaga.xaml 时,您将看到项目 #1,然后切换到 #29(视口(viewport) 正在移动 容器)。有人知道下面发生了什么吗?容器中是否有来自之前 Gaga.xaml 访问的任何虚拟化项目?

最佳答案

我的理解是,Gaga 页面实例的生命周期由其 ​​NavigationCacheMode 属性决定。默认情况下,它设置为 Disabled。假设您没有更改此属性,每次导航到 Gaga 页面时,您应该会看到一个新实例。您可以通过在其构造函数中设置断点来验证此行为。因此,我认为每次您导航到 Gaga 时,用户界面的行为应该是相同的,因为一切都是新鲜的。

(我想把这个添加为评论,因为我还没有真正回答你的问题,但遗憾的是我没有足够的代表。我提前道歉;请不要打我!)

关于wpf - 在 Windows 8 应用程序中离开 XAML 页面时,XAML 对象是否实际上保持存在?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16090594/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com