删除了一些测试方法
新增了刀序重排确认窗口 优化了应用刀序到钻带后的一些操作
This commit is contained in:
201
ToolReorderConfirmationViewModel.cs
Normal file
201
ToolReorderConfirmationViewModel.cs
Normal file
@@ -0,0 +1,201 @@
|
||||
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));
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user