private void UpdateTreeView() { var previousTreeView = TreeView; var newTreeView = new ObservableCollection <TreeViewItemViewModel>(); var ts = _magazzinoUtensile.GetTools <Utensile>(_measureUnit); var tipies = from t in ts group t by t.GetType() into tg select tg; foreach (var tipy in tipies) { string groupName; _toolDictName.TryGetValue(tipy.Key, out groupName); var toolTypeTreeView = new ToolTypeItemViewModel(groupName); toolTypeTreeView.OnItemSelected += OnItemSelected; newTreeView.Add(toolTypeTreeView); foreach (var utensile in tipy) { var t = ToolTreeViewItemViewModel.GetViewModel(utensile, toolTypeTreeView); t.OnItemSelected += OnItemSelected; toolTypeTreeView.Children.Add(t); } } /* * Ora itero vecchio albero per mantenere struttura, * */ foreach (var treeViewItemViewModel in previousTreeView) { foreach (var toolTypeItemViewModel in newTreeView) { if (treeViewItemViewModel.Label == toolTypeItemViewModel.Label && treeViewItemViewModel.IsExpanded) { toolTypeItemViewModel.IsExpanded = true; var oldChildren = treeViewItemViewModel.Children.OfType <ToolTreeViewItemViewModel>(); var newChildre = toolTypeItemViewModel.Children.OfType <ToolTreeViewItemViewModel>(); foreach (var oldChild in oldChildren) { if (oldChild.IsExpanded) { foreach (var newChild in newChildre) { if (oldChild.Tool.ToolGuid == newChild.Tool.ToolGuid) { newChild.IsExpanded = true; } } } } } } } TreeView = newTreeView; //if (TreeView.Count > 0) // TreeView.Clear(); //foreach (var keyValuePair in _toolDictName) //{ // var tools = _magazzinoUtensile.GetTools(keyValuePair.Key, _measureUnit); // var drillTreeItem = new ToolTypeItemViewModel(keyValuePair.Value); // drillTreeItem.OnItemSelected += TOnItemSelected; // foreach (var drillTool in tools) // { // var t = ToolTreeViewItemViewModel.GetViewModel(drillTool, drillTreeItem); // t.OnItemSelected += TOnItemSelected; // drillTreeItem.Children.Add(t); // } // TreeView.Add(drillTreeItem); //} }
/* * todo : * questi 2 metodi sono simili. * * magari fare - 1 metodo che ti da il tipo dell'utensile * * per create tool basta usare activator per avere oggetto * * per compatibletools usi il tipo per avere la lista di oggetti da magazzino utensile. * * in casi particolari controlli che alla lavorazione non sia legata un'interfaccia per avere * parametri per filtrare ricerca. * es IDiametroPuntaForatura * cosi restituisco solo punte con diametro certi in tutti altri casi è ok qualsiasi parametro.. */ internal List <Utensile> GetCompatibleTools(LavorazioniEnumOperazioni operationType, MagazzinoUtensile magazzino) { IEnumerable <Utensile> tools = null; switch (operationType) { case LavorazioniEnumOperazioni.FresaturaSpianaturaFinitura: case LavorazioniEnumOperazioni.FresaturaSpianaturaSgrossatura: tools = magazzino.GetTools <FresaSpianare>(MeasureUnit); break; case LavorazioniEnumOperazioni.AllargaturaBareno: case LavorazioniEnumOperazioni.Sgrossatura: case LavorazioniEnumOperazioni.Finitura: //case LavorazioniEnumOperazioni.SgrossaturaTrocoidale: case LavorazioniEnumOperazioni.FresaturaFilettare: tools = magazzino.GetTools <FresaCandela>(MeasureUnit); break; case LavorazioniEnumOperazioni.Smussatura: case LavorazioniEnumOperazioni.ForaturaSmusso: { tools = magazzino.GetTools <Svasatore>(MeasureUnit); } break; case LavorazioniEnumOperazioni.ForaturaPunta: { tools = magazzino.GetTools <Punta>(MeasureUnit); /* filtro punta diametro */ } break; case LavorazioniEnumOperazioni.ForaturaCentrino: { tools = magazzino.GetTools <Centrino>(MeasureUnit); } break; case LavorazioniEnumOperazioni.ForaturaLamatore: { tools = magazzino.GetTools <Lamatore>(MeasureUnit); } break; case LavorazioniEnumOperazioni.ForaturaBareno: { tools = magazzino.GetTools <Bareno>(MeasureUnit); } break; case LavorazioniEnumOperazioni.ForaturaAlesatore: { tools = magazzino.GetTools <Alesatore>(MeasureUnit); } break; default: { throw new NotImplementedException("DrBaseClass.GetCompTools"); //return magazzino.GetDrill(DiametroForatura, unit); } break; } if (tools != null) { return(tools.ToList()); } return(null); }