我怎样才能得到 GridViewColumnHeader 单击事件上的 ListViewControl

eMi*_*eMi 2 c# wpf listview sender

我有 7 个不同的 ListView。

有一个 Sortmethod 调用SortClick(object sender, RoutedEventArgs e)- 单击 GridViewColumnHeader 时,它会引发 SortClick 事件。

但是在这个方法中我必须告诉,哪个 ListView 应该被排序,是

listview2.SortNow();
Run Code Online (Sandbox Code Playgroud)

现在我的问题是,我怎样才能从 GridViewColumnHeader ( sender) 或者GridViewColumnHeader ( ) 中获取控件 (ListView) e,这可能吗?

ListView XAML 的样子:

<ListView ItemsSource="{Binding MissingTables}" Name="missingTablesListView" HorizontalAlignment="Stretch" VerticalAlignment="Top" Margin="0" MinHeight="540" HorizontalContentAlignment="Stretch">
                    <ListView.Background>
                        <ImageBrush />
                    </ListView.Background>
                    <ListView.View>
                        <GridView>
                            <GridViewColumn DisplayMemberBinding="{Binding TableName}" Width="Auto">
                                <GridViewColumnHeader Click="SortClick" Content="TableName" Tag="TableName" ToolTip="Sortieren" />
                            </GridViewColumn>   
                            <GridViewColumn DisplayMemberBinding="{Binding Beschreibung}" Width="Auto">
                                <GridViewColumnHeader Click="SortClick" Content="Description" Tag="Beschreibung" ToolTip="Sortieren" />
                            </GridViewColumn>
                        </GridView>
                    </ListView.View>
                </ListView>
Run Code Online (Sandbox Code Playgroud)

这是 SortClick 代码:

        /// <summary>
        /// Sortiert (Ascending/Descending)
        /// </summary>
        /// <param name="sender">sender</param>
        /// <param name="e">e</param>
        private void SortClick(object sender, RoutedEventArgs e)
        {       
            //ListView listView = sender as ListView;

            GridViewColumnHeader column = sender as GridViewColumnHeader;
            String field = column.Tag as String;

            if (currentSortColumn != null)
            {
                AdornerLayer.GetAdornerLayer(currentSortColumn).Remove(sorter);
                listView.Items.SortDescriptions.Clear();
            }

            ListSortDirection newDir = ListSortDirection.Ascending;
            if (currentSortColumn == column && sorter.Direction == newDir)
            {
                newDir = ListSortDirection.Descending;
            }

            currentSortColumn = column;
            sorter = new Sorter(currentSortColumn, newDir);
            AdornerLayer.GetAdornerLayer(currentSortColumn).Add(sorter);
            listView.Items.SortDescriptions.Add(new SortDescription(field, newDir));
        }
Run Code Online (Sandbox Code Playgroud)

Cle*_*ens 5

当您说 SortClick 事件时,我不太确定您的意思,但我想您的意思是附加GridViewColumnHeader.ClickSortClick处理程序的事件。

如果你GridViewColumnHeader.Click像这样添加到 ListViews:

<ListView GridViewColumnHeader.Click="SortClick">
Run Code Online (Sandbox Code Playgroud)

您将ListViewsender事件处理程序的参数中获得控制权,并GridViewColumnHeadere.OriginalSource.

为清楚起见进行编辑。在您的SortClick处理程序中,您将像这样访问控件:

ListView listView = sender as ListView;
GridViewColumnHeader header = e.OriginalSource as GridViewColumnHeader;
Run Code Online (Sandbox Code Playgroud)