2015-06-29 3 views
0

Я пытался разобраться мой ListView, как это: http://www.wpf-tutorial.com/listview-control/listview-how-to-column-sorting/Сортировка ListView в WPF

XAML:

<ListView x:Name="lvComputers" HorizontalAlignment="Left" Height="440" Margin="10,43,0,0" VerticalAlignment="Top" Width="560" SelectionChanged="lvComputers_SelectionChanged"> 
    <ListView.View> 
     <GridView> 
      <GridViewColumn Width="120" DisplayMemberBinding="{Binding computerName}"> 
       <GridViewColumn.Header> 
        <GridViewColumnHeader Tag="Computername" Click="lvComputersColumnHeader_Click">Computername</GridViewColumnHeader> 
       </GridViewColumn.Header> 
      </GridViewColumn> 
      <GridViewColumn Width="80" DisplayMemberBinding="{Binding operatingSystem}"> 
       <GridViewColumn.Header> 
        <GridViewColumnHeader Tag="Betriebssystem" Click="lvComputersColumnHeader_Click">Betriebssystem</GridViewColumnHeader> 
       </GridViewColumn.Header> 
      </GridViewColumn> 
     </GridView> 
    </ListView.View> 
</ListView> 

C#:

private void loadComputers() 
{ 
    lvComputers.ItemsSource = mainController.getComputers(); 
    lvComputers.Items.SortDescriptions.Add(new SortDescription("Computername", ListSortDirection.Ascending)); 
    CollectionView view = (CollectionView)CollectionViewSource.GetDefaultView(lvComputers.ItemsSource); 
    view.SortDescriptions.Add(new SortDescription("Computername", ListSortDirection.Ascending)); 
    view.Filter = UserFilter; 

} 

private void lvComputersColumnHeader_Click(object sender, RoutedEventArgs e) 
{ 
    GridViewColumnHeader column = (sender as GridViewColumnHeader); 
    string sortBy = column.Tag.ToString(); 
    if (listViewSortCol != null) 
    { 
     AdornerLayer.GetAdornerLayer(listViewSortCol).Remove(listViewSortAdorner); 
     lvComputers.Items.SortDescriptions.Clear(); 
    } 

    ListSortDirection newDir = ListSortDirection.Ascending; 
    if (listViewSortCol == column && listViewSortAdorner.Direction == newDir) 
     newDir = ListSortDirection.Descending; 

    listViewSortCol = column; 
    listViewSortAdorner = new SortAdorner(listViewSortCol, newDir); 
    AdornerLayer.GetAdornerLayer(listViewSortCol).Add(listViewSortAdorner); 
    lvComputers.Items.SortDescriptions.Add(new SortDescription(sortBy, newDir)); 
} 

"getComputers" возвращает список компьютеров на базе этот класс:

public class Computers 
{ 
    public String computerName { get; set; } 
    public String operatingSystem { get; set; } 
} 

UserFilter предназначен для поиска. Но почему-то сортировка не работает.

Я пытался добавить

lvComputers.Items.SortDescriptions.Add(new SortDescription("Computername", ListSortDirection.Ascending)); 

в

loadComputers(); 

, но это не работает.

что я делаю неправильно?

ответ

1

SortDescription строки чувствительны к регистру:

new SortDescription("Computername", ... 

должен быть

new SortDescription("computerName" 
+1

о господи, спасибо человеку –