using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using OS.Spin.ViewModle.Models; using OS.Spin.View.DefectPreviewArea; using System.Windows.Controls; namespace OS.Spin.View.Utils { /// /// 瑕疵预览区域管理工具类 /// public class DefectPreviewAreaUtil { private static List _defectPreviewAreas = null; //保存瑕疵预览区域数据用于动态刷新界面 private static object _object = new object(); //锁对象 private static DefectPreviewAreaUtil _defectPreviewAreaUtil = null; //管理其它对象的单例对象 private static List _defectSpanPreview = null; //已经添加的瑕疵点控件 private static DefectPreviewDelegateUtil _defectPreviewDelegateUtil = null; //委托实例 /// /// 无参构造函数初始化数据 /// public DefectPreviewAreaUtil() { _defectPreviewAreas = new List(); //创建瑕疵预览区域缓存区 _defectSpanPreview = new List(); _defectPreviewDelegateUtil = new DefectPreviewDelegateUtil(); //获取该委托实例 } /// /// 返回瑕疵控件对象集合 /// /// public List getDefectSpanPreviews() { return _defectSpanPreview; } /// /// 添加该瑕疵控件到集合中管理 /// /// public void addDefectSpanPreview(DefectSpanPreview defectSpanPreview) { if (!_defectSpanPreview.Contains(defectSpanPreview)) //只有不存在该对象的时候才添加该对象 { _defectSpanPreview.Add(defectSpanPreview); } } public void removeDefectSpanPreview() { if (null != _defectSpanPreview && _defectSpanPreview.Count > 0) { _defectSpanPreview.Clear(); //for(int j = 0; j < _defectSpanPreview.Count; j++) //{ // _defectSpanPreview.Remove(_defectSpanPreview[j]); //} } } /// /// 单例类实例化 /// /// public static DefectPreviewAreaUtil getInstance() { if (null == _defectPreviewAreaUtil) { lock (_object) { if (null == _defectPreviewAreaUtil) { _defectPreviewAreaUtil = new DefectPreviewAreaUtil(); } } } return _defectPreviewAreaUtil; } /// /// 获取该委托实例 /// /// public DefectPreviewDelegateUtil getDefectPreviewDelegateUtil() { return _defectPreviewDelegateUtil; } /// /// 获取瑕疵预览区集合对象 /// /// public List getDefectPreviewAreas() { return _defectPreviewAreas; } /// /// 向瑕疵集合中添加数据 /// /// public void addDefectPreviewArea(OS.Spin.ViewModle.Models.DefectPreviewArea defectPreviewArea) { _defectPreviewAreas.Add(defectPreviewArea); } /// /// 从集合中删除某个瑕疵点 /// /// public void removeDefectDataImage(DefectDataImage defectDataImage) { //保证非空 if(null != _defectSpanPreview && _defectSpanPreview.Count > 0) { //找到该控件是否存在 for(int i = 0; i < _defectSpanPreview.Count; i++) { DefectSpanPreview defectSpanPreview = _defectSpanPreview[i]; StackPanel stack = defectSpanPreview.StackPanel; Canvas canvas = (Canvas)stack.Children[4]; //瑕疵点显示区域数据 //List defectDataImages = (DefectDataImage)canvas.Children.OfType(); //最多四个 int len = canvas.Children.Count; DefectDataImage defectDataImageOne = null; for (int c = 0; c < len; c++) { defectDataImageOne = (DefectDataImage)canvas.Children[c]; if (defectDataImageOne != null && defectDataImageOne.Equals(defectDataImage)) //找到了 { canvas.Children.Remove(defectDataImageOne); //找到了就删除掉 StackPanel stackPanelOne = (StackPanel)defectDataImage.stackPanelFather; TextBlock textBlockOne = (TextBlock)stackPanelOne.Children[0]; TextBlock textBlockTwo = (TextBlock)stackPanelOne.Children[1]; TextBlock textBlockThree = (TextBlock)stackPanelOne.Children[2]; string type = textBlockOne.Text; //类型 string length = textBlockTwo.Text; //长度 string score = textBlockThree.Text; //分数 //获取布匹编号 Border border = (Border)stack.Children[0]; TextBlock textBlock = (TextBlock)border.Child; //TextBlock textBlock = (TextBlock)stack.Children[0]; string text = textBlock.Text; //根据布匹编号找到该数据 for (int j = 0; j < _defectPreviewAreas.Count; j++) { OS.Spin.ViewModle.Models.DefectPreviewArea defectPreviewArea = _defectPreviewAreas[j]; String number = defectPreviewArea.DefectNumber; if (text == number) //找到相同的编号了 { List defectSpots = defectPreviewArea.DefectSpots; for (int a = 0; a < defectSpots.Count; a++) { if (defectSpots[a].DefectType == type && defectSpots[a].DefectLength == length && defectSpots[a].DefectDeduct == score) { //到这一步终于让我给找到了,哈哈,找到了就直接删除了吧,这过程确实比较麻烦像爬虫一样 defectSpots.Remove(defectSpots[a]); //删除相同的元素 return; //我已经找到了,我还找毛线,直接return避免重复查找 } } } } } } } } } } }