グループ化された GridView を使用するための基本的な要件は次のとおりです。
(注: すべてのクラス名は任意です)
- ViewModel (Mvvm を使用していますよね?)
- 各グループの要素を保持する Group オブジェクト。
- Group がコレクションを含む Item オブジェクト
- GridView と CollectionViewSource を含む項目を表示するビュー (グループと項目のスタイルを含む)
グループとアイテムの例:
public class Group<T> where T : Item
{
public ObservableCollection<T> Items { get; set;}
public string Title { get; set; }
}
public class Item
{
public string Value { get; set; }
}
ビューモデルの例:
public class GroupsViewModel : ViewModelBase // This implementation uses Mvvm Light's ViewModelBase, feel free to use any
{
public ObservableCollection<Group<Item>> AllGroups { get; set; }
public GroupsViewModel()
{
AllGroups = new ObservableCollection<Group<Item>>();
Group<Item> group1 = new Group<Item>();
group1.Title = "Group 1 Title";
group1.Add(new Item(){ Value = "The first value." });
AllGroups.Add(group1);
Group<Item> group2 = new Group<Item>();
group2.Title = "Group 2 Title";
group2.Add(new Item(){ Value = "The second value." });
}
}
ページで、Page.Resources に CollectionViewSource を作成します。
<Page.Resources>
<CollectionViewSource Source="{Binding AllGroups}"
IsSourceGrouped=True
ItemsPath="Items"
x:Name="GroupedCollection"/>
</Page.Resources>
Source が の にバインドされていることに注意してください。 はCollection
に、そのプロパティのそれぞれの のセットをGroup
伝えItemsPath
ます。CollectionViewSource
Item
Group
これGridView
を参照します。以下のように項目ソースを設定することが重要です。{Binding}
のにSource
設定された空StaticResource
のCollectionViewSource
。のようなものGridView
を使用して、各グループをスタイルできます。GroupStyle
私はそれを信じられないほど基本的なものに落とし込みました。既に持っているデフォルトのサンプルには、より良い例があります。
<GridView ItemsSource="{Binding Source={StaticResource GroupedCollection}}"
ItemTemplate="{StaticResource Standard250x250ItemTemplate}"
>
<GridView.ItemsPanel>
<ItemsPanelTemplate>
<VirtualizingStackPanel Orientation="Horizontal"/>
</ItemsPanelTemplate>
</GridView.ItemsPanel>
<GridView.GroupStyle>
<GroupStyle>
<GroupStyle.HeaderTemplate>
<DataTemplate>
<Grid Margin="1,0,0,6">
<StackPanel Orientation="Horizontal">
<TextBlock Text="{Binding Title}" Margin="3,-7,10,10" Style="{StaticResource GroupHeaderTextStyle}" />
<TextBlock Text="{StaticResource ChevronGlyph}" FontFamily="Segoe UI Symbol" Margin="0,-7,0,10" Style="{StaticResource GroupHeaderTextStyle}"/>
</StackPanel>
</Grid>
</DataTemplate>
</GroupStyle.HeaderTemplate>
<GroupStyle.Panel>
<ItemsPanelTemplate>
<VariableSizedWrapGrid Orientation="Vertical" Margin="0,0,80,0"/>
</ItemsPanelTemplate>
</GroupStyle.Panel>
</GroupStyle>
</GridView.GroupStyle>
</GridView>
最後に、 の を に設定する必要がありDataContext
ます。Mvvm Light を使用している場合は、次のようになります。それを機能させるには、明らかにさらにセットアップを行う必要があります。コンストラクターで設定することもできます。Page
ViewModel
DataContext="{Binding GroupsVM, Source={StaticResource Locator}}"
Page
public MyGridViewPage()
{
DataContext = new GroupsViewModel();
this.InitializeComponent();
}
お役に立てれば。ハッピーコーディング!