diff --git a/XSDVisualiser.Desktop/Converters/CollectionHasItemsConverter.cs b/XSDVisualiser.Desktop/Converters/CollectionHasItemsConverter.cs new file mode 100644 index 0000000..48a53c7 --- /dev/null +++ b/XSDVisualiser.Desktop/Converters/CollectionHasItemsConverter.cs @@ -0,0 +1,37 @@ +using System; +using System.Collections; +using System.Globalization; +using Avalonia.Data.Converters; + +namespace XSDVisualiser.Desktop.Converters +{ + /// + /// Returns true if the bound value is a collection with at least one item. Supports IEnumerable and ICollection. + /// Optional parameter "Invert" to invert the boolean result. + /// + public sealed class CollectionHasItemsConverter : IValueConverter + { + public object? Convert(object? value, Type targetType, object? parameter, CultureInfo culture) + { + var hasItems = false; + switch (value) + { + case ICollection coll: + hasItems = coll.Count > 0; + break; + case IEnumerable enumerable: + { + var enumerator = enumerable.GetEnumerator(); + hasItems = enumerator.MoveNext(); + break; + } + } + + var invert = parameter is string s && s.Equals("Invert", StringComparison.OrdinalIgnoreCase); + return invert ? !hasItems : hasItems; + } + + public object? ConvertBack(object? value, Type targetType, object? parameter, CultureInfo culture) + => throw new NotSupportedException(); + } +} diff --git a/XSDVisualiser.Desktop/MainWindow.axaml b/XSDVisualiser.Desktop/MainWindow.axaml index 1bdf804..6c4fb51 100644 --- a/XSDVisualiser.Desktop/MainWindow.axaml +++ b/XSDVisualiser.Desktop/MainWindow.axaml @@ -9,6 +9,7 @@ + @@ -129,7 +130,7 @@ - + @@ -140,7 +141,7 @@ - +