Add some util functions

This commit is contained in:
2023-07-14 17:10:42 +02:00
parent c0e584143e
commit 592df9e56d
2 changed files with 53 additions and 9 deletions

View File

@ -246,5 +246,50 @@ namespace Elwig.Helpers {
}
return i;
}
public static object? GetItemFromSource(IEnumerable source, Func<object?, object?> getId, object? id) {
if (source == null)
return null;
var items = source.Cast<object>();
var item = items.Where(i => getId(i)?.Equals(id) ?? false).FirstOrDefault();
if (item == null && items.Any(i => i is NullItem))
return items.Where(i => i is NullItem).First();
return item;
}
public static object? GetItemFromSource(IEnumerable source, object? item, Func<object?, object?> getId) {
return GetItemFromSource(source, getId, getId(item));
}
public static void SelectComboBoxItem(ComboBox cb, Func<object?, object?> getId, object? id) {
cb.SelectedItem = GetItemFromSource(cb.ItemsSource, getId, id);
}
public static void SelectComboBoxItem(ComboBox cb, object? item, Func<object?, object?> getId) {
SelectComboBoxItem(cb, getId, getId(item));
}
public static IEnumerable<object?> GetItemsFromSource(IEnumerable source, Func<object?, object?> getId, IEnumerable<object?> id) {
if (source == null)
return Array.Empty<object>();
return source.Cast<object>().Where(i => getId(i)?.Equals(id) ?? false);
}
public static IEnumerable<object?> GetItemsFromSource(IEnumerable source, IEnumerable<object?>? items, Func<object?, object?> getId) {
if (items == null)
return Array.Empty<object>();
return GetItemsFromSource(source, getId, items.Select(i => getId(i)));
}
public static void SelectCheckComboBoxItems(Xceed.Wpf.Toolkit.CheckComboBox ccb, Func<object?, object?> getId, IEnumerable<object?>? ids) {
ccb.SelectedItems.Clear();
if (ids == null) return;
foreach (var id in ids)
ccb.SelectedItems.Add(Utils.GetItemFromSource(ccb.SelectedItems, getId, id));
}
public static void SelectCheckComboBoxItems(Xceed.Wpf.Toolkit.CheckComboBox ccb, IEnumerable<object>? items, Func<object?, object?> getId) {
SelectCheckComboBoxItems(ccb, getId, GetItemsFromSource(ccb.ItemsSource, items, getId));
}
}
}