猿问

WPF GridViewColumnHeader.Click - 获取 ItemsSource

我有一个 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;

                }

            }


Smart猫小萌
浏览 190回答 1
1回答

慕森王

如果您将事件处理程序连接到ListViews您的 XAML 标记中,如下所示:<ListView GridViewColumnHeader.Click="GridViewColumnHeaderClickedHandler">...你可以简单地提出sender论点:void GridViewColumnHeaderClickedHandler(object sender, RoutedEventArgs e){&nbsp; &nbsp; ListView listView = sender as ListView;&nbsp; &nbsp; ICollectionView view = CollectionViewSource.GetDefaultView(listView.ItemsSource);&nbsp; &nbsp; //...}
随时随地看视频慕课网APP
我要回答