CollectionToVisibilityConverter.cs 1.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445
  1. using System;
  2. using System.Collections;
  3. using System.Globalization;
  4. using System.Windows;
  5. using System.Windows.Data;
  6. namespace SWRIS.Converters
  7. {
  8. public class CollectionToVisibilityConverter : IValueConverter
  9. {
  10. public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
  11. {
  12. // 处理 null 值
  13. if (value == null)
  14. return Visibility.Collapsed;
  15. // 处理集合类型
  16. if (value is ICollection collection)
  17. return collection.Count > 0 ? Visibility.Visible : Visibility.Collapsed;
  18. // 处理 IEnumerable(不推荐,因为可能触发多次枚举)
  19. if (value is IEnumerable enumerable)
  20. {
  21. var enumerator = enumerable.GetEnumerator();
  22. try
  23. {
  24. return enumerator.MoveNext() ? Visibility.Visible : Visibility.Collapsed;
  25. }
  26. finally
  27. {
  28. if (enumerator is IDisposable disposable)
  29. disposable.Dispose();
  30. }
  31. }
  32. // 其他类型默认显示
  33. return Visibility.Visible;
  34. }
  35. public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
  36. {
  37. throw new NotImplementedException();
  38. }
  39. }
  40. }