C# 单击标题时的特殊排序列表视图

C# 单击标题时的特殊排序列表视图,c#,wpf,xaml,C#,Wpf,Xaml,我有这样的争吵: XAML: <ListView x:Name="ListViewAnlagen" Grid.RowSpan="2" ItemContainerStyle="{StaticResource TempContainerStyle}" VerticalAlignment="Top" HorizontalAlignment="Left" Height="571" Width="1314"

我有这样的争吵:

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。单击

我的问题是,如何将其升序和降序排序。我已经看过其他一些解决方案,但它们似乎只有在使用
displaymberbinding
绑定时才起作用

我已经尝试过的:

因为您已经检查了@AmolBavannavar()所评论的示例,这里是示例和您当前方法之间的一个hybris

改编该示例的主要障碍是使用
GridViewColumnHeader.Command
GridViewColumnHeader.CommandParameter
。该命令的等效项是
GridViewColumnHeader。单击=“GridViewColumnHeaderClickedHandler”
,但仍然需要与该命令参数等效的项

我建议您为此创建一个附加的字符串属性,并使用它将排序属性名称附加到
GridViewColumn
。为了演示,我没有创建新属性,而是滥用了
TextSearch.TextPath
attached属性:

<GridViewColumn Width="100" TextSearch.TextPath="EqNr">

注意,为了演示,我只清除了排序描述,并添加了一个静态降序排序描述。对于您的实际应用程序,您可能希望跟踪(或分析)列的当前排序状态,然后交替使用升序和降序排序。

使用
CollectionViewSource
SortDescription
您好,先生,对不起,我不明白,您有什么例子吗?如果您指的是[链接]()不是working@JulPod这很有趣。。。你有静态项目还是什么?对于大多数实际的MVVM案例,您可能会有一个
ItemsSource
Ye,我添加了如下项目:
items.add()
,我想我必须重新考虑我的绑定代码,以后似乎更容易过滤等等。@JulPod如果您不使用
ItemsSource
,您还可以尝试在我的答案中有
cvs.SortDescriptions
的地方使用
ListViewAnlagen.Items.SortDescriptions
。可能会工作(现在无法测试)刚刚测试,不工作,listview只是变为空,但不在乎,我只是用
xmldataprovider
绑定了它们,现在可以工作了,谢谢altough@JulPod顺便说一句:我刚刚测试了
ListViewAnlagen.Items.SortDescriptions
方法,它对我有效-没有空项。因此,可能您的代码中存在其他错误。
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));
        }
    }
}