GridViewColumn标题点击实现排序
时间: 2023-07-20 17:23:54 浏览: 76
C#在ListView组件中使用背景图像(绘制底纹)
要实现GridViewColumn标题点击实现排序,可以按照以下步骤进行:
1. 给GridViewColumnHeader添加一个Click事件处理程序。
2. 在Click事件处理程序中,获取GridViewColumnHeader所属的GridViewColumn对象。
3. 判断当前点击的列是否是当前排序列,如果是,则按照相反的顺序排序,否则按照默认顺序排序。
4. 对数据进行排序,并更新ListView的显示。
以下是一个示例代码,供参考:
```csharp
private GridViewColumnHeader lastClickedHeader = null;
private ListSortDirection lastSortDirection = ListSortDirection.Ascending;
private void GridViewColumnHeader_Click(object sender, RoutedEventArgs e)
{
GridViewColumnHeader clickedHeader = e.OriginalSource as GridViewColumnHeader;
if (clickedHeader != null)
{
GridViewColumn clickedColumn = clickedHeader.Column;
if (clickedColumn != null)
{
ListSortDirection sortDirection;
if (clickedHeader == lastClickedHeader)
{
sortDirection = (lastSortDirection == ListSortDirection.Ascending) ? ListSortDirection.Descending : ListSortDirection.Ascending;
}
else
{
sortDirection = ListSortDirection.Ascending;
}
string headerName = clickedColumn.Header as string;
Sort(headerName, sortDirection);
lastSortDirection = sortDirection;
lastClickedHeader = clickedHeader;
}
}
}
private void Sort(string sortBy, ListSortDirection direction)
{
ICollectionView dataView = CollectionViewSource.GetDefaultView(listView.ItemsSource);
dataView.SortDescriptions.Clear();
SortDescription sortDescription = new SortDescription(sortBy, direction);
dataView.SortDescriptions.Add(sortDescription);
dataView.Refresh();
}
```
在XAML中,将ListView的GridViewColumnHeader的Click事件绑定到GridViewColumnHeader_Click方法即可:
```xml
<ListView x:Name="listView">
<ListView.View>
<GridView>
<GridViewColumn Header="Name" DisplayMemberBinding="{Binding Name}"
Click="GridViewColumnHeader_Click"/>
<GridViewColumn Header="Age" DisplayMemberBinding="{Binding Age}"
Click="GridViewColumnHeader_Click"/>
<GridViewColumn Header="Gender" DisplayMemberBinding="{Binding Gender}"
Click="GridViewColumnHeader_Click"/>
</GridView>
</ListView.View>
</ListView>
```
注意,在代码中的Sort方法中,我们使用了CollectionView来对数据进行排序。要使用CollectionView,需要确保ListView的ItemsSource属性绑定了一个实现了IEnumerable接口的集合(比如List或ObservableCollection)。
阅读全文