【问题标题】:Re-Sort a ListView in C# - UWP在 C# 中重新排序 ListView - UWP
【发布时间】:2017-09-17 09:56:08
【问题描述】:

我创建了一个 XAML UWP 列表视图

            <ListView x:Name="ThisList" 
                  Grid.Row="3"
                  Grid.ColumnSpan="7"
                  Background="LightBlue"
                  IsItemClickEnabled="True"
                  BorderBrush="Black"
                  BorderThickness="2"
                  ItemClick="ThisList_ItemClick">
            <ListView.ItemContainerStyle>
                <Style TargetType="ListViewItem">
                    <Setter Property="HorizontalContentAlignment" Value="Stretch" />
                </Style>
            </ListView.ItemContainerStyle>

            <ListView.ItemTemplate>
                <DataTemplate>
                    <Grid BorderThickness="1" BorderBrush="Black">
                        <Grid.Resources>
                            <local:ColourConverter x:Key="CCX"/>
                        </Grid.Resources>

                        <Grid.ColumnDefinitions>
                            <ColumnDefinition Width="50"/>
                            <ColumnDefinition Width="10*" MinWidth="500"/>
                            <ColumnDefinition Width="170"/>
                            <ColumnDefinition Width="100"/>
                        </Grid.ColumnDefinitions>

                        <Border Background="Aquamarine" Grid.Column="0">
                            <SymbolIcon Symbol="{Binding Icon}" HorizontalAlignment="Center" Margin="10"/>
                        </Border>
                        <Border Background="Yellow" Grid.Column="1">
                            <TextBlock Name="tbFileName" Text="{Binding FName}" VerticalAlignment="Center" Margin="5" />
                        </Border>
                        <Border Background="Cyan" Grid.Column="2">
                            <!--<TextBlock Text="{Binding FTime}" VerticalAlignment="Center" Margin="5" />-->
                            <TextBlock Text="{Binding FTime}"
                                       Name="FileTime"
                                       VerticalAlignment="Center"
                                       HorizontalAlignment="Center"
                                       Foreground="{Binding ElementName=FileTime,
                                                            Path=Text, 
                                                            Mode=OneWay, 
                                                            Converter={StaticResource CCX}}"/>
                        </Border>
                        <Border Background="Tomato" Grid.Column="3">
                            <TextBlock Text="{Binding FSize}" HorizontalAlignment="Right" Margin="10" />
                        </Border>
                    </Grid>
                </DataTemplate>
            </ListView.ItemTemplate>
        </ListView>

后面的代码是

        var folderItem = new ObservableCollection<FolderInfo>();
        foreach (StorageFolder folder in folderList)
        {
            BasicProperties pro = await folder.GetBasicPropertiesAsync();
            folderItem.Add(new FolderInfo()
            {
                FName = folder.DisplayName,
                FSize = "",
                FTime = lastFileSave,
                FIsFolder = true                    
            });
        }

        foreach (StorageFile file in fileList)
        {
            BasicProperties pro = await file.GetBasicPropertiesAsync();
            lastFileSave = file.DateCreated.ToString(Globals.TimeFormat);
            folderItem.Add(new FolderInfo()
            {
                //FName = file.DisplayName,
                FName = file.Name,
                FSize = GetFileSize(pro.Size),
                FTime = lastFileSave,
                FIsFolder = false,
                Icon="Document"
            });

        }
        showLoadingBox(false);
        FileInfo.Text += $"Last file saved : {lastFileSave}";
        ThisList.ItemsSource = folderItem;

所以我的问题是我想创建一个标题行,我可以单击标题并按该列对 ListView 重新排序,如果我再次单击它会重新排序降序。

实现这一目标的最佳方法是什么?

【问题讨论】:

  • 看来wpf-tutorial.com/listview-control/… 会有所帮助。
  • 不幸的是,该页面仅包含 WPF 表单,而不包含我正在使用的 UWP。
  • 您正在使用 UWP 是非常重要的信息。您可能想要编辑您的问题并添加它。
  • 我很抱歉 - 已经这样做了。

标签: c# sorting listview uwp


【解决方案1】:

好的,所以没有急于回答,所以我创建了一个单独的网格来制作标题,并添加了一个点击事件来重新查询数据源,但是在它被分配给列表视图源时对其进行查询跟随。

ThisList.ItemsSource = (from FolderInfo in folderItem
                                        orderby FolderInfo.RealDateTime
                                        select FolderInfo);

这可能不是最有效的做事方式,但目前我能看到的唯一方式是在 ListView 没有某种可用的排序方法的情况下这样做。

如果有更好的方法,将不胜感激。

【讨论】:

    猜你喜欢
    • 2018-10-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-03-02
    • 1970-01-01
    • 2018-07-15
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多