我有这样的一行:
XAML:
<ListView x:Name="ListViewAnlagen"
Grid.RowSpan="2"
ItemContainerStyle="{StaticResource TempContainerStyle}"
VerticalAlignment="Top" HorizontalAlignment="Left"
Height="571" Width="1314"
Margin="0,53,0,0"
AlternationCount="2"
GridViewColumnHeader.Click="GridViewColumnHeaderClickedHandler">
<ListView.View>
<GridView ColumnHeaderContainerStyle="{DynamicResource CustomHeaderStyle}">
<GridView.Columns>
<GridViewColumn Width="100">
<GridViewColumn.CellTemplate>
<DataTemplate>
<Border x:Name="border"
BorderBrush="Gray" BorderThickness=".5" Margin="-6,-3">
<TextBlock Text="{Binding EqNr}" Margin="6,3"/>
</Border>
</DataTemplate>
</GridViewColumn.CellTemplate>
<StackPanel Orientation="Horizontal">
<TextBlock Text="EQ Nr."/>
<Image Source="img/filter.png"
Width="20" Height="20" Margin="25 0 0 0"
MouseDown="Image_MouseDown_1" />
</StackPanel>
</GridViewColumn>
我添加了一个点击处理程序:GridViewColumnHeader.Click
我的问题是,如何对这个升序和降序进行排序。我已经查看了其他一些解决方案,但它们似乎只有在用DisplayMemberBinding
绑定它时才有效。
我已经尝试过: this
答案 0 :(得分:2)
由于您已经检查了@AmolBavannavar(https://code.msdn.microsoft.com/windowsdesktop/Sorting-a-WPF-ListView-by-209a7d45)评论的示例,因此这是示例与您当前方法之间的混合。
调整示例的主要障碍是使用GridViewColumnHeader.Command
和GridViewColumnHeader.CommandParameter
。您对该命令的等效项是GridViewColumnHeader.Click="GridViewColumnHeaderClickedHandler"
,但您仍需要等效于命令参数。
我建议你为此创建一个附加的字符串属性,并使用它将排序属性名称附加到GridViewColumn
。为了演示,我不创建新属性,而是滥用TextSearch.TextPath
附加属性:
<GridViewColumn Width="100" TextSearch.TextPath="EqNr">
请注意,"EqNr"
与稍后在单元格模板中用于绑定的属性名称相同。
现在,所有内容都在点击处理程序中使用。
简化排序逻辑的代码:
private void GridViewColumnHeaderClickedHandler(object sender, RoutedEventArgs e)
{
var h = e.OriginalSource as GridViewColumnHeader;
if (h != null)
{
var propertyName = h.Column.GetValue(TextSearch.TextPathProperty) as string;
var cvs = ListViewAnlagen.ItemsSource as ICollectionView ??
CollectionViewSource.GetDefaultView(ListViewAnlagen.ItemsSource) ??
ListViewAnlagen.Items;
if (cvs != null)
{
cvs.SortDescriptions.Clear();
cvs.SortDescriptions.Add(new SortDescription(propertyName, ListSortDirection.Descending));
}
}
}
请注意,为了演示,我只清除排序说明并添加静态降序排序说明。对于您的实际应用程序,您可能希望跟踪(或分析)列的当前排序状态,然后在升序和降序排序之间切换。