Neutral Scent

App developments & Gadgets

GridViewでページ遷移からの復帰すると最初の項目が選択されてしまう問題

GridViewの仕様のようなんですが、SelectionMode="Single"を設定した場合、GridViewの初期化時に必ず先頭のアイテムが選択されてしまいます。
Single Selectといっても、スワイプ等で選択無し状態にできるコントロールであるのに、です。
何が困るかというと、スタートスクリーンのようにアイテムが選択されたらアプリケーションバーなど何かをポップアップするような実装をした場合、GridViewを含むページから一旦画面遷移して戻ってくると、最初の項目が選択されてしまい、メニューなどがいきなりポップアップしてしまうのです。
なんでこんな仕様なのかはさておき、色々調べてみましたが、解決策(回避策)としては、SelectionMode="Multiple"にするしかないようです。
Multipleにしておけば、勝手に選択されることはありません。
以下は、MultipleモードでもSingleセレクトのように他の選択されたアイテムを強制選択解除するコードビハインド



private void itemGridView_SelectionChanged_1(object sender, SelectionChangedEventArgs e)
{
if (e.AddedItems.Count > 0)
{
// 現在選択されているアイテムから、
var removeItems = itemGridView.SelectedItems
// 新規に選択されたアイテムを除外し、
.Where(i => !e.AddedItems.Any(a => a == i))
// BindされたデータからGridViewItemを取り出す。
.Select(i => itemGridView.ItemContainerGenerator.ContainerFromItem(i) as GridViewItem );
foreach (var item in removeItems)
{
item.IsSelected = false;
}
}
}
そもそも新規選択で複数同時に来ることもない気がしますし、ちょっと回りくどいんですが、こんな風にもできるよ、ということで。