有没有更好的方法来对ObservableCollection进行排序并在Listview中对其进行排序

时间:2017-11-29 21:11:42

标签: c# wpf sorting observablecollection

目前我有一个显示文件的列表视图。随着文件的添加,我希望它们按名称排序。非常重要的是集合本身被排序,因为有些操作需要按名称顺序循环遍历此集合。基本上rhe文件稍后上传到FTP站点,然后在列表视图中突出显示为绿色。确保它在" top"我需要确保收集的顺序与显示的顺序相同。

我目前有什么工作,但我不确定这是否是最好和最有效的想要做到的。我也试图在某种程度上坚持MVVM。

在XAML中,我有一段代码来对集合进行排序。在ViewModel中,我将项添加到集合中,一旦完成,我对集合进行排序。它似乎有效,但我担心它没有那么高效。

XAML:

    xmlns:scm="clr-namespace:System.ComponentModel;assembly=WindowsBase"

<Window.Resources>
    <CollectionViewSource x:Key="SortedListViewSource" Source="{Binding Selected_Photos_Binding}">
        <CollectionViewSource.SortDescriptions>
            <scm:SortDescription PropertyName="Name" />
        </CollectionViewSource.SortDescriptions>
    </CollectionViewSource>
</Window.Resources>

    <ListView x:Name="selected_files" ItemsSource="{Binding Source={StaticResource SortedListViewSource}}"

视图模型:

    public ObservableCollection<FileData> _Selected_Photos_Binding = new ObservableCollection<FileData>();
    public ObservableCollection<FileData> Selected_Photos_Binding
    {
        get
        {
            return _Selected_Photos_Binding;
        }
        set
        {
            _Selected_Photos_Binding = value;

            OnPropertyChanged(new PropertyChangedEventArgs("Selected_Photos_Binding"));
        }
    }

这一部分是我从缓冲区集合中获取文件列表然后填充可观察集合的地方。

            foreach (string entry in Selected_List_Buffer)
            {
                Selected_Photos_Binding.Add(new FileData()
                {
                    Name = System.IO.Path.GetFileName(entry),
                    Path = entry
                });
            }

            Selected_Photos_Binding = new ObservableCollection<FileData>(Selected_Photos_Binding.OrderBy(n => n.Name));

0 个答案:

没有答案