Fix event handlers in ControlUtils when new item is null

This commit is contained in:
2023-07-21 19:35:59 +02:00
parent 4571b06279
commit 69d89ecd56
3 changed files with 20 additions and 19 deletions

View File

@ -82,9 +82,7 @@ namespace Elwig.Helpers {
if (selector.ItemsSource == source) if (selector.ItemsSource == source)
return; return;
var selectedId = getId(selector.SelectedItem); var selectedId = getId(selector.SelectedItem);
if (handler != null) selector.SelectionChanged -= handler; object? selItem = null;
selector.ItemsSource = source;
object? selItem = selector.SelectedItem;
if (selectedId != null && source != null) if (selectedId != null && source != null)
selItem = source.Cast<object>().FirstOrDefault(i => selectedId.Equals(getId(i))); selItem = source.Cast<object>().FirstOrDefault(i => selectedId.Equals(getId(i)));
if (source != null && selItem == null) { if (source != null && selItem == null) {
@ -92,7 +90,9 @@ namespace Elwig.Helpers {
selItem = source.Cast<object>().First(); selItem = source.Cast<object>().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; selector.SelectedItem = selItem;
} }
@ -101,7 +101,6 @@ namespace Elwig.Helpers {
return; return;
var selectedIds = selector.SelectedItems.Cast<object>().Select(i => getId(i)).ToList(); var selectedIds = selector.SelectedItems.Cast<object>().Select(i => getId(i)).ToList();
selector.ItemsSource = source; selector.ItemsSource = source;
object? selItem = selector.SelectedItem;
if (source != null) { if (source != null) {
foreach (var i in source.Cast<object>().Where(i => selectedIds.Contains(getId(i)))) foreach (var i in source.Cast<object>().Where(i => selectedIds.Contains(getId(i))))
selector.SelectedItems.Add(i); selector.SelectedItems.Add(i);
@ -115,15 +114,7 @@ namespace Elwig.Helpers {
var sortColumns = dataGrid.Columns.Select(c => c.SortDirection).ToList(); var sortColumns = dataGrid.Columns.Select(c => c.SortDirection).ToList();
var sort = dataGrid.Items.SortDescriptions.ToList(); var sort = dataGrid.Items.SortDescriptions.ToList();
var selectedId = getId(dataGrid.SelectedItem); var selectedId = getId(dataGrid.SelectedItem);
if (handler != null) dataGrid.SelectionChanged -= handler; object? selItem = null;
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);
}
if (selectedId != null && source != null) if (selectedId != null && source != null)
selItem = source.Cast<object>().FirstOrDefault(i => selectedId.Equals(getId(i))); selItem = source.Cast<object>().FirstOrDefault(i => selectedId.Equals(getId(i)));
if (source != null && selItem == null) { if (source != null && selItem == null) {
@ -131,8 +122,16 @@ namespace Elwig.Helpers {
selItem = source.Cast<object>().First(); selItem = source.Cast<object>().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; 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) if (dataGrid.SelectedItem != null && column != null)
dataGrid.CurrentCell = new(dataGrid.SelectedItem, column); dataGrid.CurrentCell = new(dataGrid.SelectedItem, column);
} }
@ -141,9 +140,7 @@ namespace Elwig.Helpers {
if (listBox.ItemsSource == source) if (listBox.ItemsSource == source)
return; return;
var selectedId = getId(listBox.SelectedItem); var selectedId = getId(listBox.SelectedItem);
if (handler != null) listBox.SelectionChanged -= handler; object? selItem = null;
listBox.ItemsSource = source;
object? selItem = listBox.SelectedItem;
if (selectedId != null && source != null) if (selectedId != null && source != null)
selItem = source.Cast<object>().FirstOrDefault(i => selectedId.Equals(getId(i))); selItem = source.Cast<object>().FirstOrDefault(i => selectedId.Equals(getId(i)));
if (source != null && selItem == null) { if (source != null && selItem == null) {
@ -151,7 +148,9 @@ namespace Elwig.Helpers {
selItem = source.Cast<object>().First(); selItem = source.Cast<object>().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; listBox.SelectedItem = selItem;
} }

View File

@ -178,6 +178,7 @@ namespace Elwig.Windows {
} else { } else {
ClearOriginalValues(); ClearOriginalValues();
ClearInputs(validate); ClearInputs(validate);
ClearInputStates();
} }
GC.Collect(); GC.Collect();
} }

View File

@ -107,6 +107,7 @@ namespace Elwig.Windows {
DeliveryButton.IsEnabled = false; DeliveryButton.IsEnabled = false;
ClearOriginalValues(); ClearOriginalValues();
ClearInputs(validate); ClearInputs(validate);
ClearInputStates();
} }
GC.Collect(); GC.Collect();
} }