Add Search in MemberListWindow and restructure Window
This commit is contained in:
@ -25,6 +25,7 @@ namespace WGneu.Windows
|
||||
{
|
||||
private bool isEditing = false;
|
||||
private bool isCreating = false;
|
||||
private List<string> 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<Member> 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();
|
||||
|
Reference in New Issue
Block a user