私はWindows8Metro Newsreader-App(C#とXAMLを使用)に取り組んでいます。Grouped Items Page
(テンプレート)にフィードアイテムを表示します。クリックすると、ユーザーは詳細ページに移動します。これは、として実装しましたSplit Page
。したがって、ユーザーがこのDetailPageから(および戻る)ナビゲートできるImage-Galleryがあります。これは正常に機能します。ItemDetailPageで、LoadState
関数にデータを割り当てる必要があります。テンプレートは私に次の解決策を提供します:
protected override void LoadState(Object navigationParameter, Dictionary<String, Object> pageState)
{
// TODO: Assign a bindable group to this.DefaultViewModel["Group"]
// TODO: Assign a collection of bindable items to this.DefaultViewModel["Items"]
if (pageState == null)
{
// When this is a new page, select the first item automatically unless logical page
// navigation is being used (see the logical page navigation #region below.)
if (!this.UsingLogicalPageNavigation() && this.itemsViewSource.View != null)
{
this.itemsViewSource.View.MoveCurrentToFirst();
}
}
else
{
// Restore the previously saved state associated with this page
if (pageState.ContainsKey("SelectedItem") && this.itemsViewSource.View != null)
{
// TODO: Invoke this.itemsViewSource.View.MoveCurrentTo() with the selected
// item as specified by the value of pageState["SelectedItem"]
}
}
}
私がしたことは次のとおりです。
protected override void LoadState(Object navigationParameter, Dictionary<String, Object> pageState)
{
if (pageState == null)
{
// When this is a new page, select the first item automatically unless logical page
// navigation is being used (see the logical page navigation #region below.)
if (!this.UsingLogicalPageNavigation() && this.itemsViewSource.View != null)
{
this.itemsViewSource.View.MoveCurrentToFirst();
}
}
else
{
// Restore the previously saved state associated with this page
if (pageState.ContainsKey("SelectedItem") && this.itemsViewSource.View != null)
{
this.itemsViewSource.View.MoveCurrentTo(pageState["SelectedItem"]);
}
}
var item = ArticleDataSource.GetItem((int)navigationParameter);
if (item != null)
{
this.DefaultViewModel["Group"] = item.Group;
this.DefaultViewModel["Items"] = item.Group.Items;
if (this.itemsViewSource.View != null) this.itemsViewSource.View.MoveCurrentTo(item); // remove?
// Register this page as a share source.
this.dataTransferManager = DataTransferManager.GetForCurrentView();
this.dataTransferManager.DataRequested += new TypedEventHandler<DataTransferManager, DataRequestedEventArgs>(this.OnDataRequested);
}
}
- OverviewPageからDetailsPageに移動すると、選択したアイテム(A)が表示されます。
- (リストから)他のアイテムを選択すると、正しい詳細(B)が表示されます。
- DetailsPageからGalleryPageに移動すると、正しいアイテム(B)の画像が表示されます。
- ここで(DetailsPageに)戻ると、最後に選択したアイテム(B)ではなく、DetailsPageに入るために選択したアイテム(A)が表示されます。
(テンプレートによって提案された)順序を変更したという事実を認識しており、if (this.itemsViewSource.View != null) this.itemsViewSource.View.MoveCurrentTo(item);
おそらく削除したほうがよいと付け加えました。
this.itemsViewSource.View
問題(ステップ4で説明)は、 nullであるため、(論理的に)this.itemsViewSource.View.MoveCurrentTo(pageState["SelectedItem"])
実行されないと思います。残念ながら、なぜこれがバグなのか、それがバグなのかを知ることができませんでした。
ヘルプやチュートリアルへのリンク(私の問題を解決できる可能性があります)は本当にありがたいです!ありがとう。