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();
, но это не работает.
что я делаю неправильно?
о господи, спасибо человеку –