|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
Announcements
Want a new Job?
Chapters
Services
Feature Zones
|
IntroductionBy default, there is no easy way of sorting a BackgroundI wanted a more generic solution to this issue. After playing around a while, I ended up with the solution shown below. Requirements:
Using the codeTo create a custom comparer, you need to implement the abstract base class public class PersonComparer : ListViewCustomComparer<Person>
{
/// <summary>
/// Compares the specified x to y.
/// </summary>
/// <param name="x">The x.</param>
/// <param name="y">The y.</param>
/// <returns></returns>
public override int Compare(Person x, Person y)
{
try
{
String valueX = String.Empty, valueY = String.Empty;
switch (SortBy)
{
default:
case "FirstName":
valueX = x.FirstName;
valueY = y.FirstName;
break;
case "LastName":
valueX = x.LastName;
valueY = y.LastName;
break;
case "Age":
if (SortDirection.Equals(ListSortDirection.Ascending))
return x.Age.CompareTo(y.Age);
else
return (-1) * x.Age.CompareTo(y.Age);
}
if (SortDirection.Equals(ListSortDirection.Ascending))
return String.Compare(valueX, valueY);
else
return (-1) * String.Compare(valueX, valueY);
}
catch (Exception)
{
return 0;
}
}
The MainWindow.xaml: <GridViewColumn Header=“FirstName“ Width=“100“ DisplayMemberBinding=“{Binding FirstName}“ />
<GridViewColumn Header=“LastName“ Width=“100“ DisplayMemberBinding=“{Binding LastName}“ />
lt;GridViewColumn Header=“Age“ Width=“100“ DisplayMemberBinding=“{Binding Age}“ />
In the <Window x:Class="WpfListViewSorting.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:local="clr-namespace:WpfListViewSorting"
Title="WpfListViewSorting Demo" Height="300" Width="400">
<Window.Resources>
<DataTemplate x:Key="ListViewHeaderTemplateDescendingSorting">
<DockPanel>
<TextBlock Text="{Binding}"/>
<Path x:Name="arrow"
StrokeThickness = "1"
Fill = "gray"
Data = "M 5,10 L 15,10 L 10,5 L 5,10"/>
</DockPanel>
</DataTemplate>
<DataTemplate x:Key="ListViewHeaderTemplateAscendingSorting">
<DockPanel>
<TextBlock Text="{Binding }"/>
<Path x:Name="arrow"
StrokeThickness = "1"
Fill = "gray"
Data = "M 5,5 L 10,10 L 15,5 L 5,5"/>
</DockPanel>
</DataTemplate>
<DataTemplate x:Key="ListViewHeaderTemplateNoSorting">
<DockPanel>
<TextBlock Text="{Binding }"/>
</DockPanel>
</DataTemplate>
</Window.Resources>
<Grid>
<ListView Margin="5"
VirtualizingStackPanel.IsVirtualizing="True"
IsSynchronizedWithCurrentItem="True"
local:ListViewSorter.CustomListViewSorter="WpfListViewSorting.PersonComparer"
x:Name="lstView" >
<ListView.View>
<GridView AllowsColumnReorder="True">
<GridViewColumn Header="FirstName" Width="100"
DisplayMemberBinding="{Binding FirstName}" />
<GridViewColumn Header="LastName" Width="100"
DisplayMemberBinding="{Binding LastName}" />
<GridViewColumn Header="Age" Width="100"
DisplayMemberBinding="{Binding Age}" />
</GridView>
</ListView.View>
</ListView >
</Grid>
</Window>
This is all the code that needs to be added to add sorting to a Points of interestNone yet. Happy coding! History
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||