WPF GridViewColumnHeader.Click - 获取ItemsSource

问题描述 投票:0回答:1

我有一个WPF页面,我有几个ListViews。我想在点击headers时对我的列表进行排序,因为这没有问题,但是现在我为每个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);  
            }
        }
    }
}
c# wpf itemssource
1个回答
1
投票

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

<ListView GridViewColumnHeader.Click="GridViewColumnHeaderClickedHandler">

...你可以简单地施放sender论点:

void GridViewColumnHeaderClickedHandler(object sender, RoutedEventArgs e)
{
    ListView listView = sender as ListView;
    ICollectionView view = CollectionViewSource.GetDefaultView(listView.ItemsSource);
    //...
}
© www.soinside.com 2019 - 2024. All rights reserved.