我使用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立即出现在视口中(从头开始正确的视口位置)。
但是,当您单击“后退”按钮并通过选择任意缩略图项返回Gaga.xaml(让我们说#29)时,您会看到项目#1,然后切换到#29(视口正在上方移动)容器)。有人知道那里发生了什么吗?之前的Gaga.xaml访问中的容器中是否有任何虚拟化项目?
最佳答案
我的理解是,您的Gaga页面实例的寿命由其NavigationCacheMode
属性决定。默认情况下,它设置为Disabled
。假设您尚未更改此属性,则每次导航至该页面时,您应该会看到Gaga页面的新实例。您可以通过在构造函数中设置断点来验证此行为。因此,我认为每次导航到Gaga时,UI的行为都应该相同,因为一切都是新鲜的。
(我想将此添加为评论,因为我实际上尚未回答您的问题,但可惜我没有足够的代表。我事先表示歉意;请不要打扰我!)
关于wpf - 在Windows 8 App中离开XAML页面时,XAML对象是否仍然存在?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/16090594/