2017-04-20 66 views
1

我创建了一个XAML UWP列表视图重新排序在C#中的ListView - 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,如果我再次点击重新排序降序。

达到此目的的最佳方法是什么?

+0

好像http://www.wpf-tutorial.com/listview-control/listview-how-to-column-sorting/将是有益的。 –

+0

不幸的是,页面只与WPF窗体,而不是与我正在使用的UWP。 –

+0

你在做UWP是非常重要的信息。你可能想编辑你的问题并添加它。 –

回答

0

好了,所以没有答案的高峰,所以我创建了一个独立的电网,使头,并且加入了窃听事件重新查询数据源,但因为它是分配给ListView源做就可以查询如下。

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

它可能不是做事情的最有效的方式,但目前唯一的办法我可以看到这样做,而不必某种可用的排序方法的ListView。如果有这样做的更好的办法

希望任何评论。