我正在为我正在制作的RageComic读者地铁风格应用程序提供以下两个类。
public class ComicDataWNGroup
{
public ComicDataWNGroup(string title)
{
this.Title = title;
this.Items = new ObservableCollection<ComicDataItem>();
}
public String Title { get; set; }
public ObservableCollection<ComicDataItem> Items { get; private set; }
}
public class ComicDataWNSource
{
private RedditAPI.RedditManager currentManager;
public ComicDataWNSource(RedditAPI.RedditManager currentManager)
{
this.currentManager = currentManager;
Groups = new ObservableCollection<ComicDataWNGroup>();
}
public async Task<int> ObtainRecentContent()
{
SubredditComicDataSource comicList = new SubredditComicDataSource();
await comicList.LoadItems();
var comicSources = comicList.GetAllItems();
for (int i = 0; i < comicSources.Count; i++ )
{
var links = await this.currentManager.GetSubredditLinks(comicSources[i].UrlTitle, 6, 0);
ComicDataWNGroup group = new ComicDataWNGroup("From " + comicSources[i].Title);
for(int j = 0; j < links.Data.Count; j++)
{
var linkItem = (RedditAPI.Objects.Link)links.Data[j];
BitmapImage img = await ThumbnailRetriever.GetThumbnailFromRedditUrl(linkItem.ThumbnailUrl);
ComicDataItem item = new ComicDataItem(linkItem.Title, false, true, 0, img, 0, null, null, Visibility.Visible, Visibility.Collapsed);
group.Items.Add(item);
}
Groups.Add(group);
}
return 0;
}
public ObservableCollection<ComicDataWNGroup> Groups
{
{ get; private set; }
}
}
注意:ComicDataItem是一个主要包含get set属性的类。如果需要,我可以稍后发布。
使用这两个类,我试图将ComicDataWNSource对象的Groups属性绑定到GridView。
以下代码是我用于绑定的代码。
DataModel.ComicDataWNSource source = new DataModel.ComicDataWNSource(App.Manager);
await source.ObtainRecentContent();
CollectionViewSource viewSource = new CollectionViewSource();
viewSource.Source = source.Groups;
viewSource.IsSourceGrouped = true;
viewSource.ItemsPath = new PropertyPath("Items");
this.itemGridView.ItemsSource = viewSource;
GridView是Visual Studio在创建新的Grouped Items页面时生成的默认值。我已经更改了适当的绑定以匹配ComicDataWNGroup类和ComicDataItem类中的属性(如果需要,我也可以为GridView发布XAML)。此外,source.ObtainRecentContent()当前正在使用正确的数据填充Groups数组。组的数组和项的内部数组都包含对象,并且它们都不为空。
在将视图源设置为网格视图的行上出现问题。每当我尝试它时,它会引发以下异常:
参数异常:值不在预期范围内。
我不知道我为此做错了什么。我已经查看了this msdn页面,它向您展示了如何使用分组的网格视图项和查看源代码。我有什么想法吗?
答案 0 :(得分:0)
好的,我通过以下方式成功完成了这项工作:
在定义了GridView的xaml中,我将CollectionViewSource声明为相同的xaml文件而不是代码隐藏文件。
<Page.Resources>
<CollectionViewSource x:Name="itemsViewSource" ></CollectionViewSource>
</Page.Resources>
我使用以下属性绑定GridView的ItemsSource属性:
<GridView
x:Name="itemGridView"
ItemsSource="{Binding Source={StaticResource itemsViewSource}}"
</GridView>
在后面的代码中,我将代码更改为以下内容:
DataModel.ComicDataWNSource source = new DataModel.ComicDataWNSource(App.Manager);
await source.ObtainRecentContent();
itemsViewSource.Source = source.Groups;
itemsViewSource.IsSourceGrouped = true;
this.itemsViewSource.ItemsPath = new PropertyPath("Items");
通过进行这些更改,代码可以正常工作。我现在确定我做错的是ItemsSource需要一个指向CollectionViewSource对象的Binding对象,而不是实际的CollectionViewSource对象。