diff --git a/Elwig/Helpers/ControlUtils.cs b/Elwig/Helpers/ControlUtils.cs index d8f11e1..d6da3e0 100644 --- a/Elwig/Helpers/ControlUtils.cs +++ b/Elwig/Helpers/ControlUtils.cs @@ -82,9 +82,7 @@ namespace Elwig.Helpers { if (selector.ItemsSource == source) return; var selectedId = getId(selector.SelectedItem); - if (handler != null) selector.SelectionChanged -= handler; - selector.ItemsSource = source; - object? selItem = selector.SelectedItem; + object? selItem = null; if (selectedId != null && source != null) selItem = source.Cast().FirstOrDefault(i => selectedId.Equals(getId(i))); if (source != null && selItem == null) { @@ -92,7 +90,9 @@ namespace Elwig.Helpers { selItem = source.Cast().First(); } } - if (handler != null) selector.SelectionChanged += handler; + if (handler != null && selItem != null) selector.SelectionChanged -= handler; + selector.ItemsSource = source; + if (handler != null && selItem != null) selector.SelectionChanged += handler; selector.SelectedItem = selItem; } @@ -101,7 +101,6 @@ namespace Elwig.Helpers { return; var selectedIds = selector.SelectedItems.Cast().Select(i => getId(i)).ToList(); selector.ItemsSource = source; - object? selItem = selector.SelectedItem; if (source != null) { foreach (var i in source.Cast().Where(i => selectedIds.Contains(getId(i)))) selector.SelectedItems.Add(i); @@ -115,15 +114,7 @@ namespace Elwig.Helpers { var sortColumns = dataGrid.Columns.Select(c => c.SortDirection).ToList(); var sort = dataGrid.Items.SortDescriptions.ToList(); var selectedId = getId(dataGrid.SelectedItem); - if (handler != null) dataGrid.SelectionChanged -= handler; - dataGrid.ItemsSource = source; - object? selItem = dataGrid.SelectedItem; - if (keepSort) { - for (int i = 0; i < dataGrid.Columns.Count; i++) - dataGrid.Columns[i].SortDirection = sortColumns[i]; - foreach (var s in sort) - dataGrid.Items.SortDescriptions.Add(s); - } + object? selItem = null; if (selectedId != null && source != null) selItem = source.Cast().FirstOrDefault(i => selectedId.Equals(getId(i))); if (source != null && selItem == null) { @@ -131,8 +122,16 @@ namespace Elwig.Helpers { selItem = source.Cast().First(); } } - if (handler != null) dataGrid.SelectionChanged += handler; + if (handler != null && selItem != null) dataGrid.SelectionChanged -= handler; + dataGrid.ItemsSource = source; + if (handler != null && selItem != null) dataGrid.SelectionChanged += handler; dataGrid.SelectedItem = selItem; + if (keepSort) { + for (int i = 0; i < dataGrid.Columns.Count; i++) + dataGrid.Columns[i].SortDirection = sortColumns[i]; + foreach (var s in sort) + dataGrid.Items.SortDescriptions.Add(s); + } if (dataGrid.SelectedItem != null && column != null) dataGrid.CurrentCell = new(dataGrid.SelectedItem, column); } @@ -141,9 +140,7 @@ namespace Elwig.Helpers { if (listBox.ItemsSource == source) return; var selectedId = getId(listBox.SelectedItem); - if (handler != null) listBox.SelectionChanged -= handler; - listBox.ItemsSource = source; - object? selItem = listBox.SelectedItem; + object? selItem = null; if (selectedId != null && source != null) selItem = source.Cast().FirstOrDefault(i => selectedId.Equals(getId(i))); if (source != null && selItem == null) { @@ -151,7 +148,9 @@ namespace Elwig.Helpers { selItem = source.Cast().First(); } } - if (handler != null) listBox.SelectionChanged += handler; + if (handler != null && selItem != null) listBox.SelectionChanged -= handler; + listBox.ItemsSource = source; + if (handler != null && selItem != null) listBox.SelectionChanged += handler; listBox.SelectedItem = selItem; } diff --git a/Elwig/Windows/DeliveryAdminWindow.xaml.cs b/Elwig/Windows/DeliveryAdminWindow.xaml.cs index 2ef31a6..7e378bb 100644 --- a/Elwig/Windows/DeliveryAdminWindow.xaml.cs +++ b/Elwig/Windows/DeliveryAdminWindow.xaml.cs @@ -178,6 +178,7 @@ namespace Elwig.Windows { } else { ClearOriginalValues(); ClearInputs(validate); + ClearInputStates(); } GC.Collect(); } diff --git a/Elwig/Windows/MemberAdminWindow.xaml.cs b/Elwig/Windows/MemberAdminWindow.xaml.cs index 07e40b2..90b68fe 100644 --- a/Elwig/Windows/MemberAdminWindow.xaml.cs +++ b/Elwig/Windows/MemberAdminWindow.xaml.cs @@ -107,6 +107,7 @@ namespace Elwig.Windows { DeliveryButton.IsEnabled = false; ClearOriginalValues(); ClearInputs(validate); + ClearInputStates(); } GC.Collect(); }