2016-04-11 8 views
2

画像をGridViewに徐々に表示する必要があります。したがって、GridViewで選択されたアイテムを見つけるには、GridViewアイテムのIsSelectedプロパティは、CLR objectの対応するバインディングオブジェクトプロパティ(GridView's ItemSourceタイプのプロパティ)とバインドしています。 UWPRelativeSouceをサポートしていないため、インターネットで検索したところ、以下のコードが見つかりました。GridViewItem UWPアプリケーションのIsSelectedバインディング

public class GridViewEx : GridView 
{ 

     protected override void PrepareContainerForItemOverride(Windows.UI.Xaml.DependencyObject element, object item) 
     { 
      base.PrepareContainerForItemOverride(element, item); 
      var gridItem = element as GridViewItem; 

      var binding = new Binding { Mode = BindingMode.TwoWay, Source = item, Path = new PropertyPath("IsSelected") }; 
      gridItem.SetBinding(SelectorItem.IsSelectedProperty, binding); 
     } 

} 

しかし、上記の方法には欠陥があるようです。ページがスクロールダウンされて次の写真セットがロードされると、前回選択されたアイテムは選択を失います。

上記の問題を解決する前にこの問題を経験したことがありますか?

答えて

0

IsSelectedをモデルクラスに移動し、それをユーザーコントロールにバインドします。ユーザーコントロールは実際にセルであり、データテンプレートに配置されます。

<GridView.ItemTemplate> 
    <DataTemplate> 
     <controls:MyCustomControl IsSelected="{Binding IsSelected}"/> 
    </DataTemplate> 
</GridView.ItemTemplate> 

MyCustomControlでは、視覚的な違いを処理してアイテムの選択状態を表示します。あなたのモデルのリストから選択した項目のリストを取得するだけで、ViewModelはリストを「知る」必要はありません。

+1

しかし、GridViewItem.IsSelectedPropertyにバインドして、ページでユーザーが選択したアイテムのバックグラウンドでIsSelectedを設定する方法はありますか? – user1672994

+0

ユーザーがアイテムをタップしてモデルを取得し、IsSelectedプロパティを取得し、trueに設定します。 'GridViewItem.IsSelectedProperty'については忘れてしまいます。サンプルで無視するので、何もしません。 – thang2410199

+0

誰でもいいですか?これは私が知っているほとんどすべてのアプリケーションに不可欠であり、信頼できる方法はありません。 – SuperJMN

関連する問題