好了,所以對於使用分組的GridView的基本要求是:
(注:所有的類名是任意的)
- 一個ViewModel
(您使用的MVVM,對吧?)
- 一個包含每個組的元素的組對象。
- 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>
注意,來源勢必Group
的Collection
的S和ItemsPath
告訴CollectionViewSource
在每個Group
集Item
s的該財產。
您的GridView
將引用此。像下面設置項目源是非常重要的。空的{Binding}
與Source
設置爲CollectionViewSource
的StaticResource
。您可以使用GroupStyle
類似的方式在GridView
中設置每個組的樣式。我把它剝離爲令人難以置信的基本。您已有的默認示例將有一個更好的示例。
<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>
最後,你有你的Page
的DataContext
設置爲ViewModel
。如果你使用的是Mvvm Light,它會像DataContext="{Binding GroupsVM, Source={StaticResource Locator}}"
。顯然你需要做一些進一步的設置才能使其工作。您也可以將其設置在Page
的構造函數中。
public MyGridViewPage()
{
DataContext = new GroupsViewModel();
this.InitializeComponent();
}
希望這會有所幫助。快樂的編碼!
如果我理解正確,您希望看到一個解釋CollectionViewSource和GridView的簡單示例,對不對? – kimsk
@ kimsk我想他也想要解釋SampleDataSource和DefaultViewModel(s)在內置的應用程序模板中使用。 –