C# 如何使用CollectionViewSource对LongListSelector进行排序
我有一个C# 如何使用CollectionViewSource对LongListSelector进行排序,c#,windows-phone-7,windows-phone-8,collectionviewsource,longlistselector,C#,Windows Phone 7,Windows Phone 8,Collectionviewsource,Longlistselector,我有一个LongListSelector,当前正在填充来自IsolatedStorage的图像。我想能够按日期升序或降序排序。我一直在寻求帮助。由于某些原因,我无法将我的LongListSelector的ItemsSource绑定到CollectionViewSource以实现排序功能 PictureRepository.cs(在应用程序启动时从IsolatedStorage加载图片) MainPage.xaml <phone:LongListSelector x:Name="Recent
LongListSelector
,当前正在填充来自IsolatedStorage
的图像。我想能够按日期升序或降序排序。我一直在寻求帮助。由于某些原因,我无法将我的LongListSelector
的ItemsSource
绑定到CollectionViewSource
以实现排序功能
PictureRepository.cs(在应用程序启动时从IsolatedStorage
加载图片)
MainPage.xaml
<phone:LongListSelector x:Name="Recent" Margin="0,0,0,72"
LayoutMode="Grid" GridCellSize="108,108"
SelectionChanged="recent_SelectionChanged">
MainPage.xaml.cs
#region Fields
public System.Windows.Data.CollectionViewSource Source { get; set; }
#endregion
protected override void OnNavigatedTo(NavigationEventArgs e)
{
//Recent.ItemsSource = App.PictureList.Pictures; //working, unsorted
Source = new System.Windows.Data.CollectionViewSource();
Source.Source = App.PictureList.Pictures; //Not Working
//Need some sort of Cast to IList for LongListSelector?
Recent.ItemsSource = Source.View as IList<??>();
if (Settings.AscendingSort.Value)
{
//Recent.ItemsSource = PictureRepository.Instance.Pictures.OrderBy(x => x.DateTaken);
//Recent.ItemsSource = App.PictureList.Pictures.OrderBy(x => x.DateTaken);
Source.SortDescriptions.Clear();
Source.SortDescriptions.Add(new SortDescription("Date", ListSortDirection.Ascending));
}
else
{
//Recent.ItemsSource = PictureRepository.Instance.Pictures.OrderByDescending(x => x.DateTaken);
//Recent.ItemsSource = App.PictureList.Pictures.OrderByDescending(x => x.DateTaken);
Source.SortDescriptions.Clear();
Source.SortDescriptions.Add(new SortDescription("Date", ListSortDirection.Descending));
}
}
#区域字段
public System.Windows.Data.CollectionViewSource源{get;set;}
#端区
受保护的覆盖无效OnNavigatedTo(NavigationEventArgs e)
{
//最近的.ItemsSource=App.PictureList.Pictures;//正在工作,未排序
Source=新系统.Windows.Data.CollectionViewSource();
Source.Source=App.PictureList.Pictures;//不工作
//需要为LongListSelector对IList进行某种类型的强制转换吗?
最近的.ItemsSource=Source.View as IList();
if(设置.升序排序.值)
{
//最近的.ItemsSource=PictureRepository.Instance.Pictures.OrderBy(x=>x.DateTake);
//Recent.ItemsSource=App.PictureList.Pictures.OrderBy(x=>x.datetake);
Source.SortDescriptions.Clear();
Source.SortDescriptions.Add(新的SortDescription(“Date”,ListSortDirection.升序));
}
其他的
{
//最近的.ItemsSource=PictureRepository.Instance.Pictures.OrderByDescending(x=>x.DateTake);
//Recent.ItemsSource=App.PictureList.Pictures.OrderByDescending(x=>x.datetake);
Source.SortDescriptions.Clear();
Source.SortDescriptions.Add(新的SortDescription(“Date”,ListSortDirection.Descending));
}
}
是最好、最简单的解决方案。略微更改了我的实现,但效果很好。这么多代码,这么少xaml(引入cvs是为了在xaml中允许排序等,否则您最好使用collectionview)。您不绑定的任何原因,如Recent.ItemsSource=Source.View
?在设置Source.Source=App.PictureList.Pictures之后
在MainPage.xaml.cs
的上导航到
事件,放置Recent.ItemsSource=Source.View代码>出现错误,说明无法将类型“System.ComponentModel.ICollectionView”隐式转换为“System.Collection.IList”。存在显式转换(是否缺少转换?
)。不知道如何正确地转换这个?我试图引用使用列表框的。似乎ListBox
和LongListSelector
的源属性不是同一类型ListBox.ItemsSource
是类型IEnumerable
,但LongListSelector.ItemsSource
是类型IList
。显然,CollectionViewSource
需要显式转换为IList
。如果将其转换为IList
,它将不再是cvs了,是吗?是的,似乎lls的ItemsSource
是某种“独立实现”(出于某种原因,lls不是从ItemsControl
派生的),我会在一点时间内尝试找到解决方案。是的,当然。假设Items
是一个observedcollection
,并且Pictures
类有一些名为data的字段,那么您可以按以下方式进行排序:Items.OrderBy(pic=>pic.Date)
。您还可以执行类似于.OrderBy()。然后执行降序()
等操作
<phone:LongListSelector x:Name="Recent" Margin="0,0,0,72"
LayoutMode="Grid" GridCellSize="108,108"
SelectionChanged="recent_SelectionChanged">
#region Fields
public System.Windows.Data.CollectionViewSource Source { get; set; }
#endregion
protected override void OnNavigatedTo(NavigationEventArgs e)
{
//Recent.ItemsSource = App.PictureList.Pictures; //working, unsorted
Source = new System.Windows.Data.CollectionViewSource();
Source.Source = App.PictureList.Pictures; //Not Working
//Need some sort of Cast to IList for LongListSelector?
Recent.ItemsSource = Source.View as IList<??>();
if (Settings.AscendingSort.Value)
{
//Recent.ItemsSource = PictureRepository.Instance.Pictures.OrderBy(x => x.DateTaken);
//Recent.ItemsSource = App.PictureList.Pictures.OrderBy(x => x.DateTaken);
Source.SortDescriptions.Clear();
Source.SortDescriptions.Add(new SortDescription("Date", ListSortDirection.Ascending));
}
else
{
//Recent.ItemsSource = PictureRepository.Instance.Pictures.OrderByDescending(x => x.DateTaken);
//Recent.ItemsSource = App.PictureList.Pictures.OrderByDescending(x => x.DateTaken);
Source.SortDescriptions.Clear();
Source.SortDescriptions.Add(new SortDescription("Date", ListSortDirection.Descending));
}
}