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