我使用 MVVM Light Toolkit 来定义视图模型和视图之间的关联。
指示容器将视图模型注册为单例实例。因此,当需要 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 立即出现在视口中(从头开始正确的视口位置)。
但是,当您单击后退按钮并通过选择任意缩略图项(我们只说 #29)返回 Gaga.xaml 时,您将看到项目 #1,然后切换到 #29(视口在容器上方移动)。有人知道下面发生了什么吗?之前 Gaga.xaml 访问的容器中是否有任何虚拟化项目?