我正在尝试实现一个带有可排序列的网格视图的ListView。
要对ListView进行排序,我挂接GridViewColumnHeaders的Click事件,并将SortDescriptor添加到默认视图源(类似于
MSDN
)
像这样:
<ListView ItemsSource="MY ITEMS SOURCE BINDING">
<ListView.View>
<GridView>
<GridView.Columns>
<GridViewColumn DisplayMemberBinding="MY DISPLAYMEMBER BINDING">
<GridViewColumnHeader Content="My Header" Click="ColumnHeaderClicked"/>
这一切都很好,但我想概括一下。为此,我简单地派生了GridViewColumnHeader并编写了一个单击处理程序。我知道有许多可排序的列表视图实现通常是从ListView派生的,但我只是想知道这种方法是否可行。
像这样:
<ListView ItemsSource="MY ITEMS SOURCE BINDING">
<ListView.View>
<GridView>
<GridView.Columns>
<GridViewColumn DisplayMemberBinding="MY DISPLAYMEMBER BINDING">
<local:SortableGridViewColumnHeader Content="My Header"/>
为此,我需要从SortableGridViewColumnHeader代码导航到包含ListView,以便设置新的SortDescriptor。
我尝试在父级阶梯上导航,但GridViewColumnHeader不是我的ListView的可见子级。当然,我可以创建一个依赖属性并将其绑定到ListView,但是必须有一种方法来导航到它。
我该如何在代码中做到这一点?(我不是在寻找如何对WPF列表视图进行排序的答案,我想知道是否可以这样做)。
编辑
结果发现我需要的是在我的GridViewColumnHeader派生的点击处理程序中的父搜索者。
DependencyObject parent = this;
do
{
parent = VisualTreeHelper.GetParent(parent);
if (parent == null) return;
} while (!(parent is ListView));
现在我的分类工作很有魅力。