C# WPF GridViewColumnHeader。单击-获取项目资源

C# WPF GridViewColumnHeader。单击-获取项目资源,c#,wpf,itemssource,C#,Wpf,Itemssource,我有一个WPF页面,其中有几个列表视图。 我想在单击标题时对列表进行排序,这没有问题,但现在我为每个ListView创建了一个单独的函数,我想创建一个公共函数 比方说,我想替换它: contexte.ListeDesAssemblagesView.SortDescriptions.Clear(); contexte.ListeDesAssemblagesView.SortDescriptions.Add(monsort); 例如: sender.ItemsSource.SortDescript

我有一个WPF页面,其中有几个列表视图。 我想在单击标题时对列表进行排序,这没有问题,但现在我为每个ListView创建了一个单独的函数,我想创建一个公共函数

比方说,我想替换它:

contexte.ListeDesAssemblagesView.SortDescriptions.Clear();
contexte.ListeDesAssemblagesView.SortDescriptions.Add(monsort);
例如:

sender.ItemsSource.SortDescriptions.Clear();
sender.ItemsSource.SortDescriptions.Add(monsort);
编辑:这是我的功能代码修改感谢mm8

void GridViewColumnHeaderClickedHandler(object sender, RoutedEventArgs e)
{
    GridViewColumnHeader headerClicked = e.OriginalSource as GridViewColumnHeader;
    ListSortDirection direction;
    ListView listView = sender as ListView;
    ICollectionView view = CollectionViewSource.GetDefaultView(listView.ItemsSource);

    string header = "";
    if (headerClicked.Column.DisplayMemberBinding != null)
    {
        header = ((System.Windows.Data.Binding)headerClicked.Column.DisplayMemberBinding).Path.Path;
    }
    else
    {
        try
        {
            DataTemplate cellTemplate = headerClicked.Column.CellTemplate;
            Grid grid = cellTemplate.LoadContent() as Grid;
            TextBlock textBlock = grid.Children.OfType<TextBlock>().FirstOrDefault();
            header = BindingOperations.GetBinding(textBlock, TextBlock.TextProperty).Path.Path;
        }
        catch
        {

        }
    }

    string lastHeaderName = view.SortDescriptions[0].PropertyName;
    string lastDirection = view.SortDescriptions[0].Direction.ToString();
    if (headerClicked != null)
    {
        if (headerClicked.Role != GridViewColumnHeaderRole.Padding)
        {
            if (header != lastHeaderName)
            {
                direction = ListSortDirection.Ascending;
            }
            else
            {
                if (lastDirection == "Ascending")
                {
                    direction = ListSortDirection.Descending;
                }
                else
                {
                    direction = ListSortDirection.Ascending;
                }
            }
            if (header != "")
            {
                SortDescription monsort = new SortDescription(header, direction);
                view.SortDescriptions.Clear();
                view.SortDescriptions.Add(monsort);  
            }
        }
    }
}

如果将事件处理程序连接到XAML标记中的ListView,如下所示:

<ListView GridViewColumnHeader.Click="GridViewColumnHeaderClickedHandler">

如何连接事件处理程序?我不确定我是否理解连接意味着什么?我使用GridViewColumnHeader。单击事件。ListedAssemblagesView是一个ICollectionView,它是我的ListView项目Sources刚刚阅读它,我正在测试它感谢感谢,它帮助很大,找到了如何使它成为一个全局函数,以便在我的所有ListView中实现它:用它编辑了我的问题
void GridViewColumnHeaderClickedHandler(object sender, RoutedEventArgs e)
{
    ListView listView = sender as ListView;
    ICollectionView view = CollectionViewSource.GetDefaultView(listView.ItemsSource);
    //...
}