201 lines
6.6 KiB
C#
201 lines
6.6 KiB
C#
using System;
|
|
using System.Collections.Generic;
|
|
using System.Collections.ObjectModel;
|
|
using System.ComponentModel;
|
|
using System.Linq;
|
|
using System.Runtime.CompilerServices;
|
|
using System.Windows.Media;
|
|
using Brush = System.Windows.Media.Brush;
|
|
|
|
namespace DrillTools
|
|
{
|
|
/// <summary>
|
|
/// 刀序重排确认窗口视图模型
|
|
/// </summary>
|
|
public class ToolReorderConfirmationViewModel : INotifyPropertyChanged
|
|
{
|
|
private ObservableCollection<ToolOrderItem> _originalTools = new();
|
|
private ObservableCollection<ToolOrderItem> _reorderedTools = new();
|
|
|
|
/// <summary>
|
|
/// 原始刀具列表
|
|
/// </summary>
|
|
public ObservableCollection<ToolOrderItem> OriginalTools
|
|
{
|
|
get => _originalTools;
|
|
set => SetProperty(ref _originalTools, value);
|
|
}
|
|
|
|
/// <summary>
|
|
/// 重排后刀具列表
|
|
/// </summary>
|
|
public ObservableCollection<ToolOrderItem> ReorderedTools
|
|
{
|
|
get => _reorderedTools;
|
|
set => SetProperty(ref _reorderedTools, value);
|
|
}
|
|
|
|
/// <summary>
|
|
/// 构造函数
|
|
/// </summary>
|
|
public ToolReorderConfirmationViewModel()
|
|
{
|
|
}
|
|
|
|
/// <summary>
|
|
/// 使用原始和重排后的刀具列表初始化
|
|
/// </summary>
|
|
/// <param name="originalTools">原始刀具列表</param>
|
|
/// <param name="reorderedTools">重排后刀具列表</param>
|
|
public ToolReorderConfirmationViewModel(IEnumerable<ToolItem> originalTools, IEnumerable<ToolItem> reorderedTools) : this()
|
|
{
|
|
LoadTools(originalTools, reorderedTools);
|
|
}
|
|
|
|
/// <summary>
|
|
/// 加载刀具数据
|
|
/// </summary>
|
|
/// <param name="originalTools">原始刀具列表</param>
|
|
/// <param name="reorderedTools">重排后刀具列表</param>
|
|
public void LoadTools(IEnumerable<ToolItem> originalTools, IEnumerable<ToolItem> reorderedTools)
|
|
{
|
|
OriginalTools.Clear();
|
|
ReorderedTools.Clear();
|
|
|
|
// 创建原始刀具列表项
|
|
int order = 1;
|
|
foreach (var tool in originalTools)
|
|
{
|
|
OriginalTools.Add(new ToolOrderItem
|
|
{
|
|
Order = order++,
|
|
ToolNumber = tool.ToolNumber,
|
|
Diameter = tool.Diameter,
|
|
ToolTypeDisplay = tool.ToolTypeDisplay,
|
|
BackgroundColor = System.Windows.Media.Brushes.White
|
|
});
|
|
}
|
|
|
|
// 创建重排后刀具列表项,并比较位置变化
|
|
order = 1;
|
|
var originalToolList = originalTools.ToList();
|
|
var reorderedToolList = reorderedTools.ToList();
|
|
|
|
foreach (var tool in reorderedToolList)
|
|
{
|
|
// 查找该刀具在原始列表中的位置
|
|
int originalIndex = originalToolList.FindIndex(t => t.Diameter == tool.Diameter && t.ToolType == tool.ToolType);
|
|
int newIndex = reorderedToolList.IndexOf(tool);
|
|
|
|
// 判断位置是否发生变化
|
|
bool positionChanged = originalIndex != newIndex;
|
|
|
|
ReorderedTools.Add(new ToolOrderItem
|
|
{
|
|
Order = order++,
|
|
ToolNumber = tool.ToolNumber,
|
|
Diameter = tool.Diameter,
|
|
ToolTypeDisplay = tool.ToolTypeDisplay,
|
|
BackgroundColor = positionChanged ? new SolidColorBrush(System.Windows.Media.Color.FromRgb(255, 235, 238)) : new SolidColorBrush(System.Windows.Media.Color.FromRgb(232, 245, 233))
|
|
});
|
|
|
|
// 同时更新原始列表中对应项的背景色
|
|
if (originalIndex >= 0 && originalIndex < OriginalTools.Count)
|
|
{
|
|
OriginalTools[originalIndex].BackgroundColor = positionChanged ? new SolidColorBrush(System.Windows.Media.Color.FromRgb(255, 235, 238)) : new SolidColorBrush(System.Windows.Media.Color.FromRgb(232, 245, 233));
|
|
}
|
|
}
|
|
}
|
|
|
|
public event PropertyChangedEventHandler? PropertyChanged;
|
|
|
|
protected bool SetProperty<T>(ref T field, T value, [CallerMemberName] string? propertyName = null)
|
|
{
|
|
if (EqualityComparer<T>.Default.Equals(field, value))
|
|
return false;
|
|
|
|
field = value;
|
|
OnPropertyChanged(propertyName);
|
|
return true;
|
|
}
|
|
|
|
protected virtual void OnPropertyChanged([CallerMemberName] string? propertyName = null)
|
|
{
|
|
PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName));
|
|
}
|
|
}
|
|
|
|
/// <summary>
|
|
/// 刀具排序项
|
|
/// </summary>
|
|
public class ToolOrderItem : INotifyPropertyChanged
|
|
{
|
|
private int _order;
|
|
private int _toolNumber;
|
|
private double _diameter;
|
|
private string _toolTypeDisplay = string.Empty;
|
|
private Brush _backgroundColor = System.Windows.Media.Brushes.White;
|
|
|
|
/// <summary>
|
|
/// 序号
|
|
/// </summary>
|
|
public int Order
|
|
{
|
|
get => _order;
|
|
set => SetProperty(ref _order, value);
|
|
}
|
|
|
|
/// <summary>
|
|
/// 刀具编号
|
|
/// </summary>
|
|
public int ToolNumber
|
|
{
|
|
get => _toolNumber;
|
|
set => SetProperty(ref _toolNumber, value);
|
|
}
|
|
|
|
/// <summary>
|
|
/// 孔径
|
|
/// </summary>
|
|
public double Diameter
|
|
{
|
|
get => _diameter;
|
|
set => SetProperty(ref _diameter, value);
|
|
}
|
|
|
|
/// <summary>
|
|
/// 刀具类型显示文本
|
|
/// </summary>
|
|
public string ToolTypeDisplay
|
|
{
|
|
get => _toolTypeDisplay;
|
|
set => SetProperty(ref _toolTypeDisplay, value);
|
|
}
|
|
|
|
/// <summary>
|
|
/// 背景色
|
|
/// </summary>
|
|
public Brush BackgroundColor
|
|
{
|
|
get => _backgroundColor;
|
|
set => SetProperty(ref _backgroundColor, value);
|
|
}
|
|
|
|
public event PropertyChangedEventHandler? PropertyChanged;
|
|
|
|
protected bool SetProperty<T>(ref T field, T value, [CallerMemberName] string? propertyName = null)
|
|
{
|
|
if (EqualityComparer<T>.Default.Equals(field, value))
|
|
return false;
|
|
|
|
field = value;
|
|
OnPropertyChanged(propertyName);
|
|
return true;
|
|
}
|
|
|
|
protected virtual void OnPropertyChanged([CallerMemberName] string? propertyName = null)
|
|
{
|
|
PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName));
|
|
}
|
|
}
|
|
} |