diff --git a/Elwig/Helpers/Utils.cs b/Elwig/Helpers/Utils.cs index 8b60b0c..83120ec 100644 --- a/Elwig/Helpers/Utils.cs +++ b/Elwig/Helpers/Utils.cs @@ -137,27 +137,54 @@ namespace Elwig.Helpers { return null; } - public static void RenewItemsSource(Selector selector, IEnumerable? source, Func getId) { + public enum RenewSourceDefault { + None, + IfOnly, + First + } + + public static void RenewItemsSource(Selector selector, IEnumerable? source, Func getId, SelectionChangedEventHandler? handler = null, RenewSourceDefault def = RenewSourceDefault.None) { + if (selector.ItemsSource == source) + return; var selectedId = getId(selector.SelectedItem); + if (handler != null) selector.SelectionChanged -= handler; selector.ItemsSource = source; if (selectedId != null && source != null) selector.SelectedItem = source.Cast().FirstOrDefault(i => selectedId.Equals(getId(i))); + if (source != null && selector.SelectedItem == null) { + if ((def == RenewSourceDefault.IfOnly && source.Cast().Count() == 1) || def == RenewSourceDefault.First) { + selector.SelectedItem = source.Cast().First(); + } + } + if (handler != null) selector.SelectionChanged += handler; } - public static void RenewItemsSource(Xceed.Wpf.Toolkit.Primitives.Selector selector, IEnumerable? source, Func getId) { + public static void RenewItemsSource(Xceed.Wpf.Toolkit.Primitives.Selector selector, IEnumerable? source, Func getId, Xceed.Wpf.Toolkit.Primitives.ItemSelectionChangedEventHandler? handler = null, RenewSourceDefault def = RenewSourceDefault.None) { + if (selector.ItemsSource == source) + return; var selectedIds = selector.SelectedItems.Cast().Select(i => getId(i)).ToList(); + if (handler != null) selector.ItemSelectionChanged -= handler; selector.ItemsSource = source; if (source != null) { foreach (var i in source.Cast().Where(i => selectedIds.Contains(getId(i)))) selector.SelectedItems.Add(i); } + if (source != null && selector.SelectedItem == null) { + if ((def == RenewSourceDefault.IfOnly && source.Cast().Count() == 1) || def == RenewSourceDefault.First) { + selector.SelectedItem = source.Cast().First(); + } + } + if (handler != null) selector.ItemSelectionChanged += handler; } - public static void RenewItemsSource(DataGrid dataGrid, IEnumerable? source, Func getId, bool keepSort = true) { + public static void RenewItemsSource(DataGrid dataGrid, IEnumerable? source, Func getId, SelectionChangedEventHandler? handler = null, RenewSourceDefault def = RenewSourceDefault.None, bool keepSort = true) { + if (dataGrid.ItemsSource == source) + return; var column = dataGrid.CurrentCell.Column; 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; if (keepSort) { for (int i = 0; i < dataGrid.Columns.Count; i++) @@ -169,13 +196,28 @@ namespace Elwig.Helpers { dataGrid.SelectedItem = source.Cast().FirstOrDefault(i => selectedId.Equals(getId(i))); if (dataGrid.SelectedItem != null && column != null) dataGrid.CurrentCell = new(dataGrid.SelectedItem, column); + if (source != null && dataGrid.SelectedItem == null) { + if ((def == RenewSourceDefault.IfOnly && source.Cast().Count() == 1) || def == RenewSourceDefault.First) { + dataGrid.SelectedItem = source.Cast().First(); + } + } + if (handler != null) dataGrid.SelectionChanged += handler; } - public static void RenewItemsSource(ListBox listBox, IEnumerable? source, Func getId) { + public static void RenewItemsSource(ListBox listBox, IEnumerable? source, Func getId, SelectionChangedEventHandler? handler = null, RenewSourceDefault def = RenewSourceDefault.None) { + if (listBox.ItemsSource == source) + return; var selectedId = getId(listBox.SelectedItem); + if (handler != null) listBox.SelectionChanged -= handler; listBox.ItemsSource = source; if (selectedId != null && source != null) listBox.SelectedItem = source.Cast().FirstOrDefault(i => selectedId.Equals(getId(i))); + if (source != null && listBox.SelectedItem == null) { + if ((def == RenewSourceDefault.IfOnly && source.Cast().Count() == 1) || def == RenewSourceDefault.First) { + listBox.SelectedItem = source.Cast().First(); + } + } + if (handler != null) listBox.SelectionChanged += handler; } public static int Modulo(string a, int b) { diff --git a/Elwig/Windows/AdministrationWindow.cs b/Elwig/Windows/AdministrationWindow.cs index 176e4cb..f9dba8b 100644 --- a/Elwig/Windows/AdministrationWindow.cs +++ b/Elwig/Windows/AdministrationWindow.cs @@ -181,7 +181,7 @@ namespace Elwig.Windows { OriginalValues.Remove(input); } - protected void ClearInputs() { + protected void ClearInputs(bool validate = true) { foreach (var tb in TextBoxInputs) tb.Text = ""; foreach (var cb in ComboBoxInputs) @@ -192,7 +192,7 @@ namespace Elwig.Windows { cb.IsChecked = false; foreach (var rb in RadioButtonInputs) rb.IsChecked = false; - ValidateRequiredInputs(); + if (validate) ValidateRequiredInputs(); } protected bool IsValid => Valid.All(kv => kv.Value); diff --git a/Elwig/Windows/ContextWindow.cs b/Elwig/Windows/ContextWindow.cs index 8d5df37..47bd595 100644 --- a/Elwig/Windows/ContextWindow.cs +++ b/Elwig/Windows/ContextWindow.cs @@ -26,11 +26,11 @@ namespace Elwig.Windows { if (LockContext || !Context.HasBackendChanged) return; Context.Dispose(); Context = new(); - RenewContext(); + RenewContext().GetAwaiter().GetResult(); } private void OnLoaded(object sender, RoutedEventArgs evt) { - RenewContext(); + RenewContext().GetAwaiter().GetResult(); } protected override void OnClosed(EventArgs evt) { diff --git a/Elwig/Windows/DeliveryAdminWindow.xaml b/Elwig/Windows/DeliveryAdminWindow.xaml index 555ea57..6f178dd 100644 --- a/Elwig/Windows/DeliveryAdminWindow.xaml +++ b/Elwig/Windows/DeliveryAdminWindow.xaml @@ -104,19 +104,29 @@ -