diff --git a/WGneu/Windows/MemberListWindow.xaml b/WGneu/Windows/MemberListWindow.xaml
index 4d4e1af..43acb08 100644
--- a/WGneu/Windows/MemberListWindow.xaml
+++ b/WGneu/Windows/MemberListWindow.xaml
@@ -7,53 +7,98 @@
xmlns:ui="http://schemas.modernwpf.com/2019"
ui:WindowHelper.UseModernWindowStyle="True"
mc:Ignorable="d"
- Title="Mitglieder" Height="500" Width="800" MinHeight="500" MinWidth="800"
+ Title="Mitglieder" Height="600" Width="1200" MinHeight="600" MinWidth="900"
Loaded="Window_Loaded">
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
-
-
-
+
+
+
+
+
+
-
-
-
+
+
+
+
+
+
+
+
-
-
-
+
+
+
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/WGneu/Windows/MemberListWindow.xaml.cs b/WGneu/Windows/MemberListWindow.xaml.cs
index d9150a0..f1edd1d 100644
--- a/WGneu/Windows/MemberListWindow.xaml.cs
+++ b/WGneu/Windows/MemberListWindow.xaml.cs
@@ -25,6 +25,7 @@ namespace WGneu.Windows
{
private bool isEditing = false;
private bool isCreating = false;
+ private List textFilter = new();
private readonly WgContext context = new();
public MemberListWindow()
@@ -45,10 +46,39 @@ namespace WGneu.Windows
base.OnClosing(e);
}
+ private int CountMatchesInMember(Member m)
+ {
+ if (textFilter.Count == 0) return 0;
+ string[] check = new string[] { m.MgNr.ToString(), m.FamilyName.ToLower(), m.GivenName.ToLower(), m.DefaultKg.Name.ToLower() };
+ int i = 0;
+ foreach (string c in check)
+ {
+ if (textFilter.Any(f => c == f))
+ i += 10;
+ else if (textFilter.Any(f => c.Contains(f)))
+ i += 1;
+ }
+ return i;
+ }
+
private void RefreshMemberList()
{
context.Members.Load();
- MemberList.ItemsSource = context.Members.ToList();
+ List members = context.Members.OrderBy(m => m.FamilyName + " " + m.GivenName).ToList();
+
+ if (textFilter.Count > 0)
+ {
+ members = members
+ .ToDictionary(m => m, m => CountMatchesInMember(m))
+ .OrderByDescending(a => a.Value)
+ .Where(a => a.Value > 0)
+ .Select(a => a.Key)
+ .ToList();
+ }
+ MemberList.ItemsSource = members;
+ if (members.Count == 1)
+ MemberList.SelectedIndex = 0;
+
RefreshInputs();
}
@@ -196,6 +226,13 @@ namespace WGneu.Windows
LockInputs();
}
+ private void SearchInput_TextChanged(object sender, RoutedEventArgs e)
+ {
+ // TODO implement STRG+F
+ textFilter = SearchInput.Text.ToLower().Split(" ").ToList().FindAll(s => s != "");
+ RefreshMemberList();
+ }
+
private int NextMgNr()
{
int c = context.Members.Select(m => m.MgNr).Min();