我的ListView已经有了一个排序代码可以正常工作:
public void GridViewColumnHeaderClickedHandler(object sender, RoutedEventArgs e)
{
try
{
GridViewColumnHeader headerClicked = e.OriginalSource as GridViewColumnHeader;
ListSortDirection direction;
if (headerClicked.Role != GridViewColumnHeaderRole.Padding)
{
if (headerClicked != _lastHeaderClicked)
{
direction = ListSortDirection.Descending;
}
else
{
if (_lastDirection == ListSortDirection.Ascending)
{
direction = ListSortDirection.Descending;
}
else
{
direction = ListSortDirection.Ascending;
}
}
var propertyName = headerClicked.Column.GetValue(TextSearch.TextPathProperty) as string;
Sort(propertyName, direction);
_lastHeaderClicked = headerClicked;
_lastDirection = direction;
}
catch
{
return;
}
}
private void Sort(string sortBy, ListSortDirection direction)
{
ListViewAnlagen.Items.SortDescriptions.Clear();
SortDescription sd = new SortDescription(sortBy, direction);
ListViewAnlagen.Items.SortDescriptions.Add(sd);
ListViewAnlagen.Items.Refresh();
}
我的GridViewColumns的XAML:
<ListView x:Name="ListViewAnlagen" ItemContainerStyle="{StaticResource TempContainerStyle}" VerticalAlignment="Top" Height="571" Grid.RowSpan="2" Margin="0,53,0,0" AlternationCount="2" HorizontalAlignment="Left" Width="1314" GridViewColumnHeader.Click="GridViewColumnHeaderClickedHandler" Unloaded="ListViewAnlagen_Unloaded" ContextMenuClosing="ListViewAnlagen_ContextMenuClosing" ItemsSource="{Binding Anlagen}" IsSynchronizedWithCurrentItem="True">
<ListView.View>
<GridView ColumnHeaderContainerStyle="{DynamicResource CustomHeaderStyle}" xmlns:l="clr-namespace:FixedWidthColumnSample">
<GridView.Columns>
<l:FixedWidthColumn FixedWidth="100" TextSearch.TextPath="EQNr">
<GridViewColumn.CellTemplate>
<DataTemplate>
<Border x:Name="border" BorderBrush="Gray" BorderThickness=".5" Margin="-6,-3">
<TextBlock Name="txteqnr" Text="{Binding Path=EQNr}" Margin="6,3" />
</Border>
</DataTemplate>
</GridViewColumn.CellTemplate>
<StackPanel Orientation="Horizontal">
<TextBlock Text="EQ Nr."/>
</StackPanel>
</l:FixedWidthColumn>
我的问题是如果我点击(可能是图像?),如何在标题中获得升序和降序箭头,ListView中有更多列标题(我只发布一个),所以如果我点击箭头就会消失另一个列标题......任何想法?
答案 0 :(得分:1)
这很复杂,请看一个像cbr comic book reader
这样的工作样本使用sort adorner类
public class SortAdorner : Adorner
{
private readonly static Geometry _AscGeometry = Geometry.Parse("M 0,0 L 10,0 L 5,5 Z");
private readonly static Geometry _DescGeometry = Geometry.Parse("M 0,5 L 10,5 L 5,0 Z");
public ListSortDirection Direction { get; private set; }
public SortAdorner(UIElement element, ListSortDirection dir) : base(element)
{
Direction = dir;
}
protected override void OnRender(DrawingContext drawingContext)
{
base.OnRender(drawingContext);
if (AdornedElement.RenderSize.Width < 20)
return;
drawingContext.PushTransform(
new TranslateTransform( AdornedElement.RenderSize.Width - 15, (AdornedElement.RenderSize.Height - 5) / 2));
drawingContext.DrawGeometry(Brushes.Black, null, Direction == ListSortDirection.Ascending ? _AscGeometry : _DescGeometry);
drawingContext.Pop();
}
}
用于ExtendedListView
private SortAdorner _CurAdorner = null;
private void ListViewHeader_Click(object sender, RoutedEventArgs e)