如何按日期排序图像列表框

本文关键字:列表 图像 排序 何按 日期 | 更新日期: 2023-09-27 18:18:44

我将MainPage中的ListBox绑定到使用CameraCaptureTask拍摄的图像集合。一切工作正常,虽然我希望能够改变排序顺序从升序到降序当各自的RadioButtons在我的settingpage检查。我在IsolatedStorage中创建了一个值,它记住了选中了哪个RadioButton,这样当我的应用程序的MainPage加载时,ListBox的绑定集合将被排序并相应地显示。然而,我的收藏的实际排序是我遇到问题的地方。注意,对于集合中的每个图像,还保存了一个DateTaken属性。

MainPage.xaml

<ListBox x:Name="Recent" ItemsSource="{Binding Pictures}" Margin="8" 
                     SelectionChanged="recent_SelectionChanged"
</ListBox>

现在,在我的构造函数中,我将DataContext设置为PictureRepository.Instance,这实际上是用IsolatedStorage的图像填充的。我不确定在绑定之前在哪里或如何更改集合的排序顺序。我在想,实际上我可能想要绑定排序列表的副本,而实际上不改变IsolatedStorage中的排序顺序。我试图做以下事情,参考从排序列表框项按日期时间值

MainPage.xaml.cs

public MainPage()
    {
        InitializeComponent();
        DataContext = PictureRepository.Instance;
        //Determine which Sort Radio Button has been Checked and display collection accordingly
        //Also not sure if this should be performed in the OnNavigatedTo event
        if (Settings.AscendingSort.Value)
        {
            //PictureRepository.Instance.Pictures.OrderBy(p => p.DateTaken).First();
            //DataContext = PictureRepository.Instance;
            var items = Recent.Items.Cast<CapturedPicture>().OrderBy(p => p.DateTaken).ToArray();
            if (Recent.Items.Count != 0)
                Recent.Items.Clear();
            Recent.Items.Add(items);
        }
        else
        {
            //PictureRepository.Instance.Pictures.OrderByDescending(p => p.DateTaken).First();
            //DataContext = PictureRepository.Instance;
            var items = Recent.Items.Cast<CapturedPicture>().OrderByDescending(p => p.DateTaken).ToArray();
            Recent.Items.Clear();
            Recent.Items.Add(items);
        }
    }

这两个选项都不起作用,尽管我承认我从来没有尝试过在填充ListBox之前对ObservableCollection进行排序。任何链接,协助,或建议将在学习这个概念非常感激!

如何按日期排序图像列表框

我喜欢在排序ListBox时使用CollectionViewSource。您不需要更改绑定到的后端集合,而是允许控件处理此问题。

你的页面xaml:

<phone:PhoneApplicationPage.Resources>
    <CollectionViewSource x:Key="PicturesViewSource" Source="{Binding Pictures}">
        <!-- Add for design time help. This object should return a collection of pictures
        <d:Source>
            <viewModels:MyFakeObject/>
        </d:Source>
        -->
    </CollectionViewSource>
</phone:PhoneApplicationPage.Resources>
<Grid>
    <ListBox ItemsSource="{Binding Source={StaticResource PicturesViewSource}}"/>
</Grid>

在您的页面中,您可以通过添加或删除SortDescriptions来修改ColletionViewSource的排序方式。当用户更改单选按钮时,您将执行此操作。

PicturesViewSource.SortDescriptions.Clear();
PicturesViewSource.SortDescriptions.Add(new SortDescription("DateTaken", ListSortDirection.Descending));