/// <summary>
        /// Este metodo esta engachado al evento que lanza el AttributesVisualizer, cuando se chequea o se deschequea algun atributo
        /// para que este mismo control se actualice sobre las Disimilitud que debe mostrar, que coincida su tipo con la de los atributos chequeados
        /// </summary>
        public void CheckAttributes(object sender, CheckAttributeEnventArgs e)
        {
            try
            {
                List <Proximity> _dissTemp = LoadProximities();

                ElementType _elementType = Proximity.GetAttributesType(e.SelectedAttributes);

                List <Proximity> _source = new List <Proximity>();

                //en el caso que le ponga de ItemsSource (al listView de atributes en el control AttributesVisualizer) NULL, entonces e.SelectedAttributes esta vacio
                //por tanto en el metodo Proximity.GetAttributesType va retornar Numeric, porque como la lista esta vacia no hay ninguno que no sea numeric, y eso
                //esta mal, verificar el metodo Proximity.GetAttributesType para ver lo que acabo de decir, cuando la lista que le paso esta vacia
                if (e.SelectedAttributes.Count > 0)
                {
                    foreach (Proximity _prox in _dissTemp)
                    {
                        if (_prox.AdmissibleElementType == ElementType.Mixt || _prox.AdmissibleElementType == _elementType)
                        {
                            _source.Add(_prox);
                        }
                    }
                }

                //Esto es lo que se utiliza en UpdateProximities, ya que ahora ademas de cumplir las restricciones de los attributes,
                //tambien hay que verificar que el algoritmo que se seleccione pueda trabajar con esa proximidad
                CurrentProximities = _source;

                this.cb_Proximities.ItemsSource       = null;
                this.cb_Proximities.ItemsSource       = _source;
                this.cb_Proximities.DisplayMemberPath = "Name";
                if (_source.Count > 0)
                {
                    this.cb_Proximities.SelectedIndex = 0;
                }
                else
                {
                    Enviroment.Proximity = null;
                }

                //Esto es porque si se me queda seleccionado el algoritmo Metis, cuando se actualizan las proximidades
                //(si se selecciona o deseleccion un attribute)
                //se me quedan para el algoritmo Metis todas las que se puedan cargar, esto es porque no se selecciono un algoritmo,
                //entonces para que se actualicen debo seleccionar otro algoritmo.
                //this.tv_ClusterAlgs.ItemsSource = null;
                //this.tv_ClusterAlgs.ItemsSource = new ListClusterTree();
                this.tv_ClusterAlgs_SelectedItemChanged(null, null);
            }
            catch (Exception _ex)
            {
                GeneralTools.Tools.WriteToLog(_ex);
            }
        }