using Laservall.Solidworks.Model; using System; using System.Collections.Generic; using System.Collections.ObjectModel; using System.Globalization; using System.Linq; using System.Windows; using System.Windows.Controls; using System.Windows.Data; namespace Laservall.Solidworks.Windows { public class InverseBoolToVisibilityConverter : IValueConverter { public object Convert(object value, Type targetType, object parameter, CultureInfo culture) { if (value is bool b && b) { return Visibility.Collapsed; } return Visibility.Visible; } public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture) { throw new NotImplementedException(); } } public partial class ColumnConfigWindow : Window { private ObservableCollection columns; private HashSet originalNonFixedKeys; private HashSet previousRemovedKeys; public BomSettings ResultSettings { get; private set; } public ColumnConfigWindow(BomSettings settings) { InitializeComponent(); originalNonFixedKeys = new HashSet( settings.Columns.Where(c => !c.IsFixed).Select(c => c.Name)); previousRemovedKeys = new HashSet(settings.RemovedKeys ?? new HashSet()); columns = new ObservableCollection( settings.Columns.Select(c => new BomColumnConfig { Name = c.Name, IsVisible = c.IsVisible, IsExport = c.IsExport, IsFixed = c.IsFixed, IsUserAdded = c.IsUserAdded }) ); ColumnsGrid.ItemsSource = columns; } private void NewPropKeyBox_TextChanged(object sender, TextChangedEventArgs e) { NewPropKeyPlaceholder.Visibility = string.IsNullOrEmpty(NewPropKeyBox.Text) ? Visibility.Visible : Visibility.Collapsed; } private void AddCustomProp_Click(object sender, RoutedEventArgs e) { string key = NewPropKeyBox.Text?.Trim(); if (string.IsNullOrEmpty(key)) { return; } if (columns.Any(c => c.Name == key)) { MessageBox.Show(this, $"列 \"{key}\" 已存在", "提示", MessageBoxButton.OK, MessageBoxImage.Warning); return; } columns.Add(new BomColumnConfig { Name = key, IsVisible = true, IsExport = true, IsFixed = false, IsUserAdded = true }); previousRemovedKeys.Remove(key); NewPropKeyBox.Text = ""; } private void DeleteColumn_Click(object sender, RoutedEventArgs e) { if (!(sender is Button btn)) { return; } if (!(btn.DataContext is BomColumnConfig col)) { return; } if (col.IsFixed) { return; } columns.Remove(col); } private void OK_Click(object sender, RoutedEventArgs e) { var remainingNames = new HashSet(columns.Select(c => c.Name)); var removedKeys = new HashSet(previousRemovedKeys); foreach (var key in originalNonFixedKeys) { if (!remainingNames.Contains(key)) { removedKeys.Add(key); } } removedKeys.ExceptWith(remainingNames); ResultSettings = new BomSettings { Columns = columns.ToList(), RemovedKeys = removedKeys }; DialogResult = true; } private void Cancel_Click(object sender, RoutedEventArgs e) { DialogResult = false; } } }