- TransferViewModel: source/dest site selection, Copy/Move mode, conflict policy, export failed - TransferView: SitePickerDialog and FolderBrowserDialog wiring, confirm dialog - BulkMembersViewModel, BulkSitesViewModel: CSV import, validate, preview, execute, retry, export - FolderStructureViewModel: CSV import, site URL + library inputs, folder creation - All 3 bulk Views: ConfirmBulkOperationDialog wiring, DataGrid preview with validation status - Added EnumBoolConverter, StringToVisibilityConverter, ListToStringConverter to converters file
99 lines
3.7 KiB
C#
99 lines
3.7 KiB
C#
using System.Collections.Generic;
|
|
using System.Globalization;
|
|
using System.Windows;
|
|
using System.Windows.Data;
|
|
|
|
namespace SharepointToolbox.Views.Converters;
|
|
|
|
/// <summary>Converts IndentLevel (int) to WPF Thickness for DataGrid indent.</summary>
|
|
[ValueConversion(typeof(int), typeof(Thickness))]
|
|
public class IndentConverter : IValueConverter
|
|
{
|
|
public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
|
|
{
|
|
int level = value is int i ? i : 0;
|
|
return new Thickness(level * 16, 0, 0, 0);
|
|
}
|
|
|
|
public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
|
|
=> throw new NotImplementedException();
|
|
}
|
|
|
|
/// <summary>Converts byte count (long) to human-readable size string.</summary>
|
|
[ValueConversion(typeof(long), typeof(string))]
|
|
public class BytesConverter : IValueConverter
|
|
{
|
|
public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
|
|
{
|
|
long bytes = value is long l ? l : 0L;
|
|
if (bytes >= 1_073_741_824L) return $"{bytes / 1_073_741_824.0:F2} GB";
|
|
if (bytes >= 1_048_576L) return $"{bytes / 1_048_576.0:F2} MB";
|
|
if (bytes >= 1024L) return $"{bytes / 1024.0:F2} KB";
|
|
return $"{bytes} B";
|
|
}
|
|
|
|
public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
|
|
=> throw new NotImplementedException();
|
|
}
|
|
|
|
/// <summary>Inverts a bool binding — used to disable controls while an operation is running.</summary>
|
|
[ValueConversion(typeof(bool), typeof(bool))]
|
|
public class InverseBoolConverter : IValueConverter
|
|
{
|
|
public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
|
|
=> value is bool b && !b;
|
|
|
|
public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
|
|
=> value is bool b && !b;
|
|
}
|
|
|
|
/// <summary>
|
|
/// Converts a string to Visibility: Visible when non-empty, Collapsed when null or empty.
|
|
/// </summary>
|
|
[ValueConversion(typeof(string), typeof(Visibility))]
|
|
public class StringToVisibilityConverter : IValueConverter
|
|
{
|
|
public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
|
|
=> value is string s && !string.IsNullOrEmpty(s) ? Visibility.Visible : Visibility.Collapsed;
|
|
|
|
public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
|
|
=> throw new NotImplementedException();
|
|
}
|
|
|
|
/// <summary>
|
|
/// Converts an enum value to bool by comparing it with the ConverterParameter.
|
|
/// Used for RadioButton IsChecked bindings to enum properties.
|
|
/// </summary>
|
|
public class EnumBoolConverter : IValueConverter
|
|
{
|
|
public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
|
|
{
|
|
if (value == null || parameter == null) return false;
|
|
return value.ToString() == parameter.ToString();
|
|
}
|
|
|
|
public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
|
|
{
|
|
if (value is bool b && b && parameter != null)
|
|
return Enum.Parse(targetType, parameter.ToString()!);
|
|
return System.Windows.DependencyProperty.UnsetValue;
|
|
}
|
|
}
|
|
|
|
/// <summary>
|
|
/// Converts a List<string> to a single semicolon-separated string for display in DataGrid cells.
|
|
/// </summary>
|
|
public class ListToStringConverter : IValueConverter
|
|
{
|
|
public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
|
|
{
|
|
if (value is IEnumerable<string> list)
|
|
return string.Join("; ", list);
|
|
return string.Empty;
|
|
}
|
|
|
|
public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
|
|
=> throw new NotImplementedException();
|
|
}
|
|
|