private async void CargarInformacion()
        {
            //Vacia datos a propiedades
            limpiarCampos();


            ID          = SelectedProducto.ID_PRODUCTO;
            Nombre      = SelectedProducto.NOMBRE;
            Descripcion = SelectedProducto.DESCRIPCION;
            if (SelectedProducto.PRODUCTO_IMAGEN != null)
            {
                ImagenData = SelectedProducto.PRODUCTO_IMAGEN.IMAGEN;
            }
            Activo = (SelectedProducto.ACTIVO == "S") ? true : false;

            if (SelectedProducto.ID_CATEGORIA.HasValue)
            {
                SelectedProducto_Categoria = Producto_Categorias.FirstOrDefault(f => f.ID_CATEGORIA == SelectedProducto.ID_CATEGORIA.Value);
            }
            if (SelectedProducto.ID_SUBCATEGORIA.HasValue || SelectedProducto_Categoria.PRODUCTO_SUBCATEGORIA.Count > 0)
            {
                IsSubcategoriaVisible = true;
                CargarSubCategoria(SelectedProducto_Categoria.ID_CATEGORIA);
                if (SelectedProducto.ID_SUBCATEGORIA.HasValue)
                {
                    SelectedProducto_SubcategoriaValue = Producto_Subcategorias.FirstOrDefault(f => f.ID_SUBCATEGORIA == SelectedProducto.ID_SUBCATEGORIA.Value).ID_SUBCATEGORIA;
                }
                else
                {
                    SelectedProducto_SubcategoriaValue = -1;
                }
            }
            if (SelectedProducto.ID_PRESENTACION.HasValue)
            {
                SelectedProducto_Presentacion = Producto_Presentaciones.FirstOrDefault(f => f.ID_PRESENTACION == SelectedProducto.ID_PRESENTACION.Value);
            }
            if (SelectedProducto.ID_UNIDAD_MEDIDA.HasValue)
            {
                SelectedProducto_Unidad_Medida = Producto_Unidades_Medida.FirstOrDefault(f => f.ID_UNIDAD_MEDIDA == SelectedProducto.ID_UNIDAD_MEDIDA.Value);
            }
            //hay que cambiar el tipo de llenado porque es asincrono
            selectedAlmacen_Grupo = Almacen_Grupos.FirstOrDefault(w => w.ID_ALMACEN_GRUPO == SelectedProducto.ALMACEN_TIPO_CAT.First().ID_ALMACEN_GRUPO);
            RaisePropertyChanged("SelectedAlmacen_Grupo");
            IsGrupoDefinido = true;
            await CargarAlmacen_Tipos_CatAwaitable(selectedAlmacen_Grupo.ID_ALMACEN_GRUPO, SelectedProducto.ALMACEN_TIPO_CAT.ToList());

            setValidationRules(false);
        }
        private async void OnLoad(object sender)
        {
            var _error = false;

            StaticSourcesViewModel.ShowProgressLoading("Espere un momento..");
            try
            {
                await Task.Factory.StartNew(() =>
                {
                    LlenarEstatusDisponibles();
                    CargarBusquedaAlmacen_Tipos_Cat(true);
                    CargaCatalogo(BusquedaAlmacen_Tipos_Cat.First(w => w.ID_ALMACEN_TIPO == -1).ID_ALMACEN_TIPO, Lista_Estatus.LISTA_ESTATUS.First(w => w.CLAVE == "S").CLAVE, true);
                    CargarAlmacen_Grupos(true);
                    CargarProducto_Categorias(true);
                    CargarProducto_Presentaciones(true);
                    CargarProducto_Unidad_Medida(true);
                }).ContinueWith((prevTask) => {
                    SelectedEstatus = Lista_Estatus.LISTA_ESTATUS.First(w => w.CLAVE == "S");
                    SelectedBusquedaAlmacen_Tipo_Cat = BusquedaAlmacen_Tipos_Cat.First(w => w.ID_ALMACEN_TIPO == -1);
                    if (string.IsNullOrWhiteSpace(_usuario.Almacen_Grupo))
                    {
                        SelectedAlmacen_Grupo = Almacen_Grupos.First(w => w.ID_ALMACEN_GRUPO == "");
                    }
                    else
                    {
                        selectedAlmacen_Grupo = Almacen_Grupos.FirstOrDefault();
                        RaisePropertyChanged("SelectedAlmacen_Grupo");
                    }
                    SelectedProducto_Categoria     = Producto_Categorias.First(w => w.ID_CATEGORIA == -1);
                    SelectedProducto_Presentacion  = Producto_Presentaciones.First(w => w.ID_PRESENTACION == -1);
                    SelectedProducto_Unidad_Medida = Producto_Unidades_Medida.First(w => w.ID_UNIDAD_MEDIDA == -1);
                });

                StaticSourcesViewModel.CloseProgressLoading();
            }
            catch (Exception)
            {
                _error = true;
            }
            if (_error)
            {
                StaticSourcesViewModel.CloseProgressLoading();
                await _dialogCoordinator.ShowMessageAsync(this, "Error", "Hubo un error al cargar los catalogos. Favor de contactar al administrador");
            }
        }
 private void limpiarCampos()
 {
     ID          = null;
     Activo      = true;
     Descripcion = null;
     Nombre      = null;
     Filename    = null;
     if (string.IsNullOrWhiteSpace(_usuario.Almacen_Grupo))
     {
         SelectedAlmacen_Grupo = Almacen_Grupos.FirstOrDefault(w => w.ID_ALMACEN_GRUPO == "");
     }
     else
     {
         SelectedAlmacen_Grupo = Almacen_Grupos.FirstOrDefault();
     }
     SelectedProducto_Categoria         = Producto_Categorias.FirstOrDefault(w => w.ID_CATEGORIA == -1);
     SelectedProducto_Presentacion      = Producto_Presentaciones.FirstOrDefault(w => w.ID_PRESENTACION == -1);;
     SelectedProducto_SubcategoriaValue = -1;
     SelectedProducto_Unidad_Medida     = Producto_Unidades_Medida.FirstOrDefault(w => w.ID_UNIDAD_MEDIDA == -1);
     SelectedAlmacen_Tipo_Cat           = null;
     IsSubcategoriaVisible = false;
     ImagenData            = new FileManagerProvider().fileToByteArray("pack://application:,,,/GESAL;component/Resources/Images/nophoto.png");
 }
        private async Task CargarInformacionAwaitable()
        {
            //Vacia datos a propiedades
            limpiarCampos();


            ID          = SelectedProducto.ID_PRODUCTO;
            Nombre      = SelectedProducto.NOMBRE;
            Descripcion = SelectedProducto.DESCRIPCION;
            if (SelectedProducto.PRODUCTO_IMAGEN != null)
            {
                ImagenData = SelectedProducto.PRODUCTO_IMAGEN.IMAGEN;
            }
            Activo = (SelectedProducto.ACTIVO == "S") ? true : false;

            if (SelectedProducto.ID_CATEGORIA.HasValue)
            {
                SelectedProducto_Categoria = Producto_Categorias.FirstOrDefault(f => f.ID_CATEGORIA == SelectedProducto.ID_CATEGORIA.Value);
            }
            if (SelectedProducto.ID_SUBCATEGORIA.HasValue || SelectedProducto_Categoria.PRODUCTO_SUBCATEGORIA.Count > 0)
            {
                IsSubcategoriaVisible = true;
                StaticSourcesViewModel.ShowProgressLoading("Espere un momento...");
                await Task.Factory.StartNew(() =>
                {
                    CargarSubCategoria(selectedProducto_Categoria.ID_CATEGORIA);
                })
                .ContinueWith((prevTask) => {
                    if (SelectedProducto.ID_SUBCATEGORIA.HasValue)
                    {
                        SelectedProducto_SubcategoriaValue = Producto_Subcategorias.FirstOrDefault(f => f.ID_SUBCATEGORIA == SelectedProducto.ID_SUBCATEGORIA.Value).ID_SUBCATEGORIA;
                    }
                    else
                    {
                        SelectedProducto_SubcategoriaValue = -1;
                    }
                    IsSubcategoriaVisible = true;
                    setValidationRules(true);
                });

                StaticSourcesViewModel.CloseProgressLoading();
            }
            else
            {
                IsSubcategoriaVisible = false;
                setValidationRules(false);
            }
            if (SelectedProducto.ID_PRESENTACION.HasValue)
            {
                SelectedProducto_Presentacion = Producto_Presentaciones.FirstOrDefault(f => f.ID_PRESENTACION == SelectedProducto.ID_PRESENTACION.Value);
            }
            if (SelectedProducto.ID_UNIDAD_MEDIDA.HasValue)
            {
                SelectedProducto_Unidad_Medida = Producto_Unidades_Medida.FirstOrDefault(f => f.ID_UNIDAD_MEDIDA == SelectedProducto.ID_UNIDAD_MEDIDA.Value);
            }
            //hay que cambiar el tipo de llenado porque es asincrono
            selectedAlmacen_Grupo = Almacen_Grupos.FirstOrDefault(w => w.ID_ALMACEN_GRUPO == SelectedProducto.ALMACEN_TIPO_CAT.First().ID_ALMACEN_GRUPO);
            RaisePropertyChanged("SelectedAlmacen_Grupo");
            IsGrupoDefinido = true;
            await CargarAlmacen_Tipos_CatAwaitable(selectedAlmacen_Grupo.ID_ALMACEN_GRUPO, SelectedProducto.ALMACEN_TIPO_CAT.ToList());

            setValidationRules(false);
        }