[英]How do I get the GridViewColumn Header index in the GridViewColumnHeader.Click event?
[英]How can I get, the ListViewControl on GridViewColumnHeader Click Event
我有7个不同的ListViews。
有一种称为SortClick(object sender, RoutedEventArgs e)
的Sortmethod-单击GridViewColumnHeader时,将引发SortClick事件。
但是在这种方法中,我必须确定应该对哪个ListView进行排序
listview2.SortNow();
现在我的问题是,如何从GridViewColumnHeader( sender
)或e
获得控件(ListView),这甚至可能吗?
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>
这是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));
}
我不太确定您说的SortClick事件是什么意思,但我想您的意思是附加了SortClick
处理程序的GridViewColumnHeader.Click
事件。
如果将GridViewColumnHeader.Click
添加到ListViews中,如下所示:
<ListView GridViewColumnHeader.Click="SortClick">
您将在事件处理程序的sender
参数中获得ListView
控件,并在e.OriginalSource
获得GridViewColumnHeader
。
编辑为清楚起见。 在您的SortClick
处理程序中,您将像这样访问控件:
ListView listView = sender as ListView;
GridViewColumnHeader header = e.OriginalSource as GridViewColumnHeader;
我会使用Clemens的解决方案,但是如果您不愿意这样做,您还可以在可视树上走走以找到ListView:
static T FindAncestor<T>(DependencyObject obj) where T : DependencyObject
{
var tmp = VisualTreeHelper.GetParent(obj);
while (tmp != null && !(tmp is T))
{
tmp = VisualTreeHelper.GetParent(tmp);
}
return (T)tmp;
}
...
var listView = FindAncestor<ListView>(columnHeader);
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.