C# 单击标题时的特殊排序列表视图
我有这样的争吵: XAML: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"
<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));
}
}
}