Add sorting

This commit is contained in:
Jeremy Wu
2019-09-12 07:42:42 +10:00
parent 24debbf349
commit 2eede422a4
2 changed files with 54 additions and 3 deletions

View File

@@ -22,7 +22,7 @@
<Button Height="30" HorizontalAlignment="Right" Margin="10 0 0 0" x:Name="btnLoadAllProgramSource" Click="btnLoadAllProgramSource_OnClick" Width="100" Content="Load All" />
<Button Height="30" HorizontalAlignment="Right" Margin="10 0 0 0" x:Name="btnDisableProgramSource" Click="btnDisableProgramSource_OnClick" Width="100" Content="Disable" />
</StackPanel>
<ListView x:Name="programSourceView" Grid.Row="1" AllowDrop="True" SelectionMode="Multiple"
<ListView x:Name="programSourceView" Grid.Row="1" AllowDrop="True" SelectionMode="Multiple" GridViewColumnHeader.Click="GridViewColumnHeaderClickedHandler"
PreviewMouseRightButtonUp="ProgramSourceView_PreviewMouseRightButtonUp"
DragEnter="programSourceView_DragEnter"
Drop="programSourceView_Drop" >

View File

@@ -1,5 +1,4 @@
using System.Collections;
using System.Collections.Generic;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Threading.Tasks;
@@ -9,6 +8,8 @@ using System.Windows.Input;
using Wox.Plugin.Program.Views.Models;
using Wox.Plugin.Program.Views.Commands;
using Wox.Plugin.Program.Programs;
using System.ComponentModel;
using System.Windows.Data;
namespace Wox.Plugin.Program.Views
{
@@ -19,6 +20,9 @@ namespace Wox.Plugin.Program.Views
{
private PluginInitContext context;
private Settings _settings;
private GridViewColumnHeader _lastHeaderClicked;
private ListSortDirection _lastDirection;
internal static List<ProgramSource> ProgramSettingDisplayList { get; set; }
public ProgramSetting(PluginInitContext context, Settings settings, Win32[] win32s, UWP.Application[] uwps)
@@ -179,5 +183,52 @@ namespace Wox.Plugin.Program.Views
{
programSourceView.SelectedItems.Clear();
}
private void GridViewColumnHeaderClickedHandler(object sender, RoutedEventArgs e)
{
var headerClicked = e.OriginalSource as GridViewColumnHeader;
ListSortDirection direction;
if (headerClicked != null)
{
if (headerClicked.Role != GridViewColumnHeaderRole.Padding)
{
if (headerClicked != _lastHeaderClicked)
{
direction = ListSortDirection.Ascending;
}
else
{
if (_lastDirection == ListSortDirection.Ascending)
{
direction = ListSortDirection.Descending;
}
else
{
direction = ListSortDirection.Ascending;
}
}
var columnBinding = headerClicked.Column.DisplayMemberBinding as Binding;
var sortBy = columnBinding?.Path.Path ?? headerClicked.Column.Header as string;
Sort(sortBy, direction);
_lastHeaderClicked = headerClicked;
_lastDirection = direction;
}
}
}
private void Sort(string sortBy, ListSortDirection direction)
{
ICollectionView dataView =
CollectionViewSource.GetDefaultView(programSourceView.ItemsSource);
dataView.SortDescriptions.Clear();
SortDescription sd = new SortDescription(sortBy, direction);
dataView.SortDescriptions.Add(sd);
dataView.Refresh();
}
}
}