Fix event handlers in ControlUtils

This commit is contained in:
2023-07-21 18:39:21 +02:00
parent fd7a15bc5a
commit bfedf436d8

View File

@ -94,32 +94,28 @@ namespace Elwig.Helpers {
var selectedId = getId(selector.SelectedItem); var selectedId = getId(selector.SelectedItem);
if (handler != null) selector.SelectionChanged -= handler; if (handler != null) selector.SelectionChanged -= handler;
selector.ItemsSource = source; selector.ItemsSource = source;
object? selItem = selector.SelectedItem;
if (selectedId != null && source != null) if (selectedId != null && source != null)
selector.SelectedItem = source.Cast<object>().FirstOrDefault(i => selectedId.Equals(getId(i))); selItem = source.Cast<object>().FirstOrDefault(i => selectedId.Equals(getId(i)));
if (source != null && selector.SelectedItem == null) { if (source != null && selItem == null) {
if ((def == RenewSourceDefault.IfOnly && source.Cast<object>().Count() == 1) || def == RenewSourceDefault.First) { if ((def == RenewSourceDefault.IfOnly && source.Cast<object>().Count() == 1) || def == RenewSourceDefault.First) {
selector.SelectedItem = source.Cast<object>().First(); selItem = source.Cast<object>().First();
} }
} }
if (handler != null) selector.SelectionChanged += handler; if (handler != null) selector.SelectionChanged += handler;
selector.SelectedItem = selItem;
} }
public static void RenewItemsSource(Xceed.Wpf.Toolkit.Primitives.Selector selector, IEnumerable? source, Func<object?, object?> getId, Xceed.Wpf.Toolkit.Primitives.ItemSelectionChangedEventHandler? handler = null, RenewSourceDefault def = RenewSourceDefault.None) { public static void RenewItemsSource(Xceed.Wpf.Toolkit.Primitives.Selector selector, IEnumerable? source, Func<object?, object?> getId) {
if (selector.ItemsSource == source) if (selector.ItemsSource == source)
return; return;
var selectedIds = selector.SelectedItems.Cast<object>().Select(i => getId(i)).ToList(); var selectedIds = selector.SelectedItems.Cast<object>().Select(i => getId(i)).ToList();
if (handler != null) selector.ItemSelectionChanged -= handler;
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);
} }
if (source != null && selector.SelectedItem == null) {
if ((def == RenewSourceDefault.IfOnly && source.Cast<object>().Count() == 1) || def == RenewSourceDefault.First) {
selector.SelectedItem = source.Cast<object>().First();
}
}
if (handler != null) selector.ItemSelectionChanged += handler;
} }
public static void RenewItemsSource(DataGrid dataGrid, IEnumerable? source, Func<object?, object?> getId, SelectionChangedEventHandler? handler = null, RenewSourceDefault def = RenewSourceDefault.None, bool keepSort = true) { public static void RenewItemsSource(DataGrid dataGrid, IEnumerable? source, Func<object?, object?> getId, SelectionChangedEventHandler? handler = null, RenewSourceDefault def = RenewSourceDefault.None, bool keepSort = true) {
@ -131,6 +127,7 @@ namespace Elwig.Helpers {
var selectedId = getId(dataGrid.SelectedItem); var selectedId = getId(dataGrid.SelectedItem);
if (handler != null) dataGrid.SelectionChanged -= handler; if (handler != null) dataGrid.SelectionChanged -= handler;
dataGrid.ItemsSource = source; dataGrid.ItemsSource = source;
object? selItem = dataGrid.SelectedItem;
if (keepSort) { if (keepSort) {
for (int i = 0; i < dataGrid.Columns.Count; i++) for (int i = 0; i < dataGrid.Columns.Count; i++)
dataGrid.Columns[i].SortDirection = sortColumns[i]; dataGrid.Columns[i].SortDirection = sortColumns[i];
@ -138,15 +135,16 @@ namespace Elwig.Helpers {
dataGrid.Items.SortDescriptions.Add(s); dataGrid.Items.SortDescriptions.Add(s);
} }
if (selectedId != null && source != null) if (selectedId != null && source != null)
dataGrid.SelectedItem = source.Cast<object>().FirstOrDefault(i => selectedId.Equals(getId(i))); selItem = source.Cast<object>().FirstOrDefault(i => selectedId.Equals(getId(i)));
if (dataGrid.SelectedItem != null && column != null) if (source != null && selItem == null) {
dataGrid.CurrentCell = new(dataGrid.SelectedItem, column);
if (source != null && dataGrid.SelectedItem == null) {
if ((def == RenewSourceDefault.IfOnly && source.Cast<object>().Count() == 1) || def == RenewSourceDefault.First) { if ((def == RenewSourceDefault.IfOnly && source.Cast<object>().Count() == 1) || def == RenewSourceDefault.First) {
dataGrid.SelectedItem = source.Cast<object>().First(); selItem = source.Cast<object>().First();
} }
} }
if (handler != null) dataGrid.SelectionChanged += handler; if (handler != null) dataGrid.SelectionChanged += handler;
dataGrid.SelectedItem = selItem;
if (dataGrid.SelectedItem != null && column != null)
dataGrid.CurrentCell = new(dataGrid.SelectedItem, column);
} }
public static void RenewItemsSource(ListBox listBox, IEnumerable? source, Func<object?, object?> getId, SelectionChangedEventHandler? handler = null, RenewSourceDefault def = RenewSourceDefault.None) { public static void RenewItemsSource(ListBox listBox, IEnumerable? source, Func<object?, object?> getId, SelectionChangedEventHandler? handler = null, RenewSourceDefault def = RenewSourceDefault.None) {
@ -155,14 +153,16 @@ namespace Elwig.Helpers {
var selectedId = getId(listBox.SelectedItem); var selectedId = getId(listBox.SelectedItem);
if (handler != null) listBox.SelectionChanged -= handler; if (handler != null) listBox.SelectionChanged -= handler;
listBox.ItemsSource = source; listBox.ItemsSource = source;
object? selItem = listBox.SelectedItem;
if (selectedId != null && source != null) if (selectedId != null && source != null)
listBox.SelectedItem = source.Cast<object>().FirstOrDefault(i => selectedId.Equals(getId(i))); selItem = source.Cast<object>().FirstOrDefault(i => selectedId.Equals(getId(i)));
if (source != null && listBox.SelectedItem == null) { if (source != null && selItem == null) {
if ((def == RenewSourceDefault.IfOnly && source.Cast<object>().Count() == 1) || def == RenewSourceDefault.First) { if ((def == RenewSourceDefault.IfOnly && source.Cast<object>().Count() == 1) || def == RenewSourceDefault.First) {
listBox.SelectedItem = source.Cast<object>().First(); selItem = source.Cast<object>().First();
} }
} }
if (handler != null) listBox.SelectionChanged += handler; if (handler != null) listBox.SelectionChanged += handler;
listBox.SelectedItem = selItem;
} }
public static object? GetItemFromSource(IEnumerable source, Func<object?, object?> getId, object? id) { public static object? GetItemFromSource(IEnumerable source, Func<object?, object?> getId, object? id) {