Vanguarsoft Developers blog

Ing. Javier Leal – Coordinador de Requerimientos en Traetelo.com / Traiter Lourted – VENEZUELA


Deja un comentario

Uso de los Objetos Dictionary

dictionary-locals

Buenos Días tecnólogos hoy les traigo como usar los Diccionarios que son una herramienta muy útil para crear Código dinámico en tus aplicaciones, mucho de nosotros desarrolladores estamos acostumbrados a crear Entidades con sus propiedades para luego a estas entidades utilizarlas para Insertar, Mostrar Valores, Obtener Listas de dicho Objeto a partir de una consulta SQL y creamos tantas entidades como tablas tengamos para crear nuestro sistema lo que no permite que nuestro sistema sea Dinámico, no podemos reutilizar consultas ni adicionar campos por que implicaría una entidad nueva o una modificación fuerte de código.

Estas practicas ya muchos desarrolladores las han mejorado con herramientas de distintas formas y una de ellas muy útil es crear Diccionarios donde nuestras entidades estáticas pasan a ser Dinámicas ya todo depende de lo que incluye el diccionario de datos pero como podemos aplicar esta lógica?

Concepto por MSDN

Representa una colección de claves y valores.

Namespace: System.Collections.Generic

Primero que nada vamos a declarar una Variable de tipo Diccionario:

Se debe declarar de esta manera:

Dictionary<TKey, TValue> Nombre

Donde:

TKEY: Es el tipo de dato que utilizaras para el KEY puede ser un Entero, Una Cadena String que es lo mas Habitual pero en si esto puede ser lo que quieras.

TVALUE: es el tipo de datos del valor que va a estar ligado al Key Anterior puede ser de cualquier tipo normalmente es un Object así permitirá almacenar en este cualquier tipo de Objeto.

Nombre: Nombre de la variable para utilizarla en código.

Ejemplos:

Dictionary<string, Object>

Dictionary<int, string>

Dictionary<Object, Object>

Dictionary<string, string>

En nuestro caso Utilizaremos el mas habitual y que nos permita crear una Entidad Dinámica.

Dictionary<string, Object> DinamyObj = new Dictionary<string, Object>();

En esta modalidad puedes almacenar lo que sea en este objeto y sabrás donde esta cada cosa que adiciones dentro de ella a través de su Key.

Para Adicionar utiliza el Método Add que permite agrega la clave y el valor especificados al diccionario.

Ejemplo Adicionar la Fecha Actual,un valor Booleano Un string o entero:

DinamyObj.Add(“FechaActual”,DateTime.Now());

DinamyObj.Add(“Nombre”,”Javier Leal”);

DinamyObj.Add(“Edad”,25);

DinamyObj.Add(“Activo”,true);

Si puedes Adicionar Obviamente puede Eliminar Valores para ello en el Método Remove

DinamyObj.Remove(“Edad”);

O el Método Clear en caso de querer Eliminar todos los valores.

DinamyObj.Clear();

 

Además de esto hay Métodos donde puedes buscar verificar si un valor en especifico tales son los casos de los Métodos ContainsKey Determina si la colección Dictionary contiene la clave especificada y el ContainsValue Determina si la colección Dictionary contiene un valor específico.

Ejemplo:

DinamyObj.Containskey(“Apellido”); Devuelve: False

DinamyObj.ContainsValue(25); Devuelve: True

DinamyObj.Containskey(“Nombre”); Devuelve: True

DinamyObj.ContainsValue(False); Devuelve: False

 

A este tipo de objetos podemos hacerle un recorrido para conocer o listar todas sus claves o sus valores para acceder a esos valores

Ejemplo:

DinamyObj.Keys Devuelve: Un diccionario con los valores de las claves

DinamyObj.Values Devuelve: Un diccionario con los valores

 

Luego de que estos objetos ya están creados se puede editar y asignar de esta manera por ejemplo para cambiar el valor de edad seria:

DinamyObj[“Edad”] = 27;

y para escribirlo en un control por ejemplo en un texto seria

TXTEdad.Text = DinamyObj[“Edad”].ToString();

Cabe destacar que hacemos conversión de String debido a que el devuelve es un Object entonces si estamos por ejemplo devolviendo un valor Bool como es caso del valor Clave Activo a un control CheckBox seria

Check.IsChecked = Convert.ToBoolean(DinamyObj[“Edad”]);

A su vez también es importante para cuando estamos aplicando en Patrón MVVM en nuestros proyectos saben enlazar estos Objetos a través de enlaces Binding, Ejemplo asignando un valor a un Textbox y un check

<TextBox> Text="{Binding DinamyObj[Nombre], Mode=TwoWay}"/>

<CheckBox> IsChecked ="{Binding DinamyObj[Activo], Mode=TwoWay}"/>

Por ultimo estos objetos como todos podemos agregarlos a colecciones para tener listas de diccionarios que pueden ser enlazados de igual manera que que cualquier colección

List<Dictionary<string, Object>> ListDictionary

Espero que le saquen provecho a la información pueden buscar mas información por la Documentación Original.

http://msdn.microsoft.com/en-us/library/xfhwa508(v=vs.95).aspx


Deja un comentario

Obtener un Archivo a partir de una Url – Silverlight

urlBuenos días internautas de nuevo iniciare con mis artículos en esta ocasión les traigo algo bastante sencillo, pero que puede llegar a ser muy útil dependiendo de las necesidades de la aplicación que estén desarrollando.

A mi me sirvo mucho en uno de mis desarrollos y me pareció interesante publicarlo ya que para lograr hacerlo encontré pocas referencias en español, basados en esto comenzamos…

Primero que nada vamos a ver una url que lleva a una archivo en este ejemplo es una imagen pero estamos hablado de que esto puede ser un archivo de cualquier extensión .rar .doc .png, la idea es obtener un arreglo de Byte o el stream de este archivo y ya tu personalmente si lo quieres mostrar se haría el código necesario a partir de arreglo de Byte o Stream:

En pocas palabras y resumiendo vamos a obtener a partir de una URL e Arreglo de byte y Stream del archivo que viene en esa URL.

url de Ejemplo almacenada en una variable string:

CODIGO C SHARP

string URL = “http://png-4.findicons.com/files/icons/1636/file_icons_vs_3/256/url.png”;

Para lograr esto utilizaremos las clases: HttpWebRequest, WebRequest, IsolatedStorageFileStream

Es importantes recalcar que para lograr esto se utilizo el IsolateStorage para almacenar la imagen temporalmente y eliminarla luego de obtener el Array Byte a partir del archivo almacenado en el Isolate Storage.

Antes de procesar podrías validar si la url en verdad se trata de un archivo obteniendo la extensión que son los tres últimos valores de la url.

Cabe destacar que una Url que te trae un archivo no siempre tiene la extensión puede no tenerla y igualmente representar un archivo pero se tendría que buscar otra manera de saber de que tipo de archivo de trata, si tiene la extensión podrás validad de una vez para saber que es lo que me mostrara en la interfaz.

CODIGO C SHARP

string ExtensionFile = System.IO.Path.GetExtension(URLFile).ToLower();

Una ver que tenemos nuestra Url en una variable ya validad la procesamos utilizando la clase anteriormente mencionada.

Se declara una variable Global:

CODIGO C SHARP

IsolatedStorageFileStream streamToWriteTo;

El siguiente código debes incluirlo en el botón y método donde deseas capturar el archivo a partir de la url:

CODIGO C SHARP

streamToWriteTo = new IsolatedStorageFileStream(“NOMBREFILE”, FileMode.Create, file);

HttpWebRequest request = (HttpWebRequest)WebRequest.Create(URL);

request.AllowReadStreamBuffering = false;
request.BeginGetResponse(new AsyncCallback(GetData), request);

NOMBREFILE es el nombre que llevara el archivo dentro de IsolateStorage de silverlight Temporalmente.

Método GetData.

CODIGO C SHARP

private void GetData(IAsyncResult result)
{
    HttpWebRequest request = (HttpWebRequest)result.AsyncState;
    HttpWebResponse response = (HttpWebResponse)request.EndGetResponse(result);

    Stream str = response.GetResponseStream();

    byte[] data = new byte[16 * 1024];
    int read;

    long totalValue = response.ContentLength;
    while ((read = str.Read(data, 0, data.Length)) > 0)
    {
        if (streamToWriteTo.Length != 0)
            streamToWriteTo.Write(data, 0, read);
    }

     streamToWriteTo.Close();
    //Completado
}

Una vez que este proceso se ha completado puedes buscar l archivo en el IsolateStorage de Silverlight

CODIGO C SHARP

using (IsolatedStorageFile isolatedStorageFile = IsolatedStorageFile.GetUserStoreForApplication())
{
    if (isolatedStorageFile.FileExists(“NOMBREFILE”))
    {

         //AQUI TENEMOS EN STREAM

        IsolatedStorageFileStream isolatedStorageFileStream = isolatedStorageFile.OpenFile(CargarfILE, FileMode.Open, FileAccess.Read);

        //AQUI TENEMOS EL ARRAYBYTE

        byte[] ArrayFile = new byte[isolatedStorageFileStream.Length];
        isolatedStorageFileStream.Read(ArrayFile, 0, ArrayFile.Length);
        isolatedStorageFileStream.Dispose();
    }

}

Con ese Stream o el Arreglo de Bute puedes hacer muchas cosas almacenarlo en una base de datos, Mostrar en un visor de imagen si se trata de una imagen, visor de pdf, documentos, Musica, Video Etc.

Espero que les sea muy útil, tanto como a mi.


Deja un comentario

Dibujar Figuras en Canvas con el Mouse

Buen día amigos Internautas tiempo sin publicar artículos técnico, eh esta do trabajando en algunos proyectos y uno mismo al investigar y buscar se da cuenta donde hace falta documentar y donde hay suficiente información, por ello este articulo bastante sencillo pero muy útil si quieres crear una herramienta que dibuje figuras o cuando requieres resaltar una posición de una imagen y objeto.

Cada programador busca una funcionalidad especifica para utilizarla en cualquier tipo de funcionalidad.

Empezamos…

Primero que nada colocaremos un Canvas en nuestro proyecto, como muchos saben un canvas es un lienzo de posicionamiento absoluto que utiliza coordenadas X y Y para situar a los objetos que contiene dentro.

Primero que nada Dibuja un Canvas en tu App es importante que tenga un tamaño fijo y no que se autoajuste a ningún objeto, colocarle un color para poder Distinguirlo y si lo desea así como lo coloque yo un Cursor.

<Canvas  Width=”1000″ Height=”700″ x:Name=”LienzoClave” Background=”White” Cursor=”Stylus” />

A este objeto Canvas le crearemos 3 Eventos

MouseLeftButtonDown = Se ejecuta al presionar el Botón derecho sobre el objeto

MouseMove = Se ejecuta cuando el Mouse esta en Movimiento sobre el objeto

MouseLeftButtonUp = Cuanto se Suelta el botón derecho de mouse sobre el objeto

<Canvas Margin=”10″ Width=”1000″ Height=”700″ x:Name=”LienzoClave” Background=”White” MouseLeftButtonDown=”LienzoClave_MouseLeftButtonDown”  MouseLeftButtonUp=”LienzoClave_MouseLeftButtonUp” MouseMove=”LienzoClave_MouseMove” Cursor=”Stylus” />

Vamos ahora a programar cada uno de los eventos:

Declaramos una variable Global llamada Move de Tipo Bool, con su valor por defecto False, además de dos Mas de Tipo Double llamadas TopPosition y LeftPosition.

double topPosition;
double leftPosition;
bool Move = false;

private void LienzoClave_MouseLeftButtonDown(object sender, MouseButtonEventArgs e)
{
        LienzoClave.Children.Clear();

        Point point = e.GetPosition(LienzoClave);
topPosition = point.Y;
leftPosition = point.X;
Move = true;
}

En resumen lo que hace este código es limpiar el Canvas de todos los objetos que tenga dentro, luego capturar la posición del mouse en el canvas según sus coordenadas X y Y, Esas coordenadas las almacenamos en las Variables Globales TopPosition y LeftPosition

Teniendo Click sostenido vamos a comenzar a dibujar la figura. y es donde entra el juego el MouseMove para este evento declaramos 3 variables globales que utilizaremos WidthDesing, HeightDesing ambos de Tipo Double y rec de tipo Rectagle.

private void LienzoClave_MouseMove(object sender, MouseEventArgs e)
{
if (Move)
{
Point p = e.GetPosition(LienzoClave);
WidthDesing = p.X – leftPosition;
HeightDesing = p.Y – topPosition;
LienzoClave.Children.Clear();
if (WidthDesing < 0 || HeightDesing<0)
{ }
else
{

            rec = new Rectangle();
rec.Fill = new SolidColorBrush(Colors.Blue);

            rec.Width = Convert.ToInt32(WidthDesing);
rec.Height = Convert.ToInt32(HeightDesing);
Canvas.SetLeft(rec, leftPosition);
Canvas.SetTop(rec, topPosition);

            LienzoClave.Children.Add(rec);
}
}
}

 

 

Pueden ver en este Código se valida si el Valor Bool Move es Activo para que este código no se ejecute sin haber presionado el click, se captura de nuevo la posición del mouse, que a medida que mueve cambian las posiciones y se hace una resta entre las posiciones actuales menos el punto de partida eso resultaría dar el ancho y alto de lo que se esta dibujando y se almacenan en otras Variables Globales llamada WithDesing y HeightDesing.

Limpiamos el lienzo completamente, verificamos que los valores anteriores no sean menores de 0 por que daría error, Inicializamos el objeto rectángulo declarado a nivel global, se le coloca un color al rectángulo, Y se le asigna la posición que ocupara en el canvas y su ancho y alto y lo dibuja, esto se ejecutara mientras tengamos presionado click y se mueva el mouse en el objeto.

Finalmente el ultimo Evento para que nuestro objeto quede dibujado.

private void LienzoClave_MouseLeftButtonUp(object sender, MouseButtonEventArgs e)
{
Move = false;
}

Acá una imagen y espero sea útil pronto otros detalles no editar el objeto dibujado, obviamente tu eliges que dibujar.. un rectángulo hice yo en este caso pero hay muchas formas.

DIBUJARENCANVAS


Deja un comentario

Detectar si tienes conexión en una App Windows Phone o Windows 8

Buenos días en esta oportunidad les traeré un truco Interesante. Muchas veces en tus aplicaciones dependen de una conexión de internet si este es tu caso debería de validar si la aplicación cuenta con conexión o no para evitar errores en la ejecución de la misma y vamos a mostrar como hacerlo en Silverlight para Windows Phone y en aplicaciones para Windows 8.

 

En Windows Phone podemos detectar el estado de la conexión de una forma sumamente sencilla. En el namespace System.Net.NetworkInformation tenemos la clase NetworkInterface que nos permite fácilmente comprobar si hay conexión lo podemos ver en el siguiente codigo:

if (NetworkInterface.GetIsNetworkAvailable())

{

// Hay conexión.

}

else

{

// No hay conexión.

}

Existen problemas en el Método anterior. Si ejecutas desde el emulador el método anterior siempre devuelve true, es decir, siempre hay conexión. Sin embargo, en el dispositivos físicos funciona. Podemos realizar en el método anterior una pequeña modificación para poder realizar las pruebas cuando no hay conexión:

private bool IsNetworkAvailable()

{

#if DEBUG

return false;

#endif

if (NetworkInterface.GetIsNetworkAvailable())

return true;

else

return false;

}

En Windows 8 no tenemos disponible el método GetIsNetworkAvailable. Sin embargo, pero si tenemos el namespace Windows.Networking.Connectivity y la clase NetworkInformation para poder realizar la misma tarea. Podemos subscribirnos a un evento de la clase NetworkInformation ya mencionada llamadoNetworkStatusChanged que se lanzará cada vez que hay cambios en la red (pasamos de tener internet a no tenerlo o viceversa):

NetworkInformation.NetworkStatusChanged += NetworkInformationNetworkStatusChanged;

 

void NetworkInformationNetworkStatusChanged(object sender)

{

if (NetworkInformation.GetInternetConnectionProfile() == null)

//No hay conexion

else

//Hay conexion

}

Hemos utilizado el método GetInternetConnectionProfile que nos indica el tipo de perfil utilizado por la aplicación. En caso de ser null, no tenemos conexión a internet.


Deja un comentario

Truco: Manejar Scroll mediando código en Silverlight

IC505349Muchas veces necesitamos agregar un valor a un ListBox pero resulta que este el muy largo y queremos que de manera automática se vaya al ultimo valor para que se agrego.

Esto es un sencillo truco que les permitirá lograr esto en Sus aplicaciones Silverlight.

Primera que nada les mostrase dos casos que hasta el momento se me han podido presentar en mis desarrollos:

1. – El primer caso es cuando queremos hacer un aumento o Disminución progresivo del LixtBox.

Simplemente usamos la propiedad SelectIndex para la misma.

Para ir al ultimo:

listBox1.SelectedIndex++;

Para Regresar o subir:

listBox1.SelectedIndex--;

Cuando estos valores progresivos se para de sus valores máximos, es decir, si nuevo listBox el de 5 valores y nuestra sumatoria de Index lleva mas alto que ella este te dará un erro por lo tanto hay que tomarlo muy en cuenta controlando la cantidad de Item que tiene el control o simplemente con un Try controlas este error:

try
{
  listBox1.SelectedIndex++;
}
catch (ArgumentOutOfRangeException)
{
  // si ocurre el erro llévame a primer valor
  listBox1.SelectedIndex = 0;
}

2. – El segundo caso es cuando queremos ir a un valor especifico de ese ListBox.

Cuando se quiere hacer esta función necesitamos primero saber cual es el valor del Index del Item al cual quieres que el Scroll, es típico cuando queremos hacer esto en un chat que estemos desarrollando o al cargar una pagina y querer ir inmediatamente al ultimo valor.

Podemos colocar entonces este código al cargar la pantalla o en un botón o luego de enviar o guardar un valor.

    miListBox.SelectedIndex = 14; //Seleccionamos el elemento 14 por ejemplo           
    miListBox.ScrollIntoView(miListBox.SelectedItem);

Espero que les sea útil y hasta la próxima.


Deja un comentario

Uso de QueryString en aplicaciones de Silverlight para Windows Phone

En las aplicaciones de Silverlight, las de Windows phone e inclusive la de Windows 8 es posible al momento de navegar entre una pagina y otra enviarle parámetros y en este articulo vamos a ver como lograr enviar parámetros y que clases son necesarias.

Como ejemplo usaremos una aplicación de Windows Phone que navegara de una pagina a otra, usaremos la clase NavigationService que es la encargada de Navegar entre pantalla y llevar el Historial de las mismas.

Como sabrán QueryString es el mismo método que utilizan las pagina web para enviar y recibir parámetros al navegar de una pagina a otra y Silverlight ha adoptado este método precisamente para el mismo funcionamiento al momento de navegar entre pagina.

Para explicar un poco mas esto vamos a ver la estructura de un QueryString quizá en las URL de las paginas web lo han visto y no se han percatado del por que tantos símbolos extraños en las URL.

Estructura

/URL?V1=12&v2=20

 

Donde como pueden Ver /URL es la tura de la pagina a donde va a navegar en Silverlight.

El símbolo ?: representa el inicio del QueryString y inmediatamente se coloca el primer valor.

V1=12 : Es el nombre de la primera variable que se esta pasando por el QueryString y el 12 es el valor de la variable V1.

& : Este símbolo representa que continua el queryString.

v2=20 : v2 es el nombre de la segunda variable enviada y seguido se su valor que es 20

Aquí una imagen que lo explica mas claro

 

Para navegar a una pagina enviando QueryString:

 

Pueden incluir en en el evento click de un boton el siguiente codigo:

string Ganador = “Javier”

NavigationService.Navigate(new Uri("/SegundaPag.xaml?g=" + Ganador, UriKind.Relative));

Se pueden Fijar que aquí tenemos una variable local llamada ganador que suponiendo que es un juego y quieres enviar el nombre del Ganador este lo enviara en una variable de nombre g.

Para recibir los valores enviados por QueryString:

 

Para recibir estos valores debemos llamar al Método OnNavigatedTo que toda pagina tienes y es el primero que se ejecuta al llamar a la pagina con solo escribir en el Código detrás de la pagina aparecerá en el Itellisense de visual studio y presiona tabulador para que este cree el método sobrescrito.

     protected override void OnNavigatedTo(System.Windows.Navigation.NavigationEventArgs e)
     {
string ganador = string.Empty;
if (NavigationContext.QueryString.TryGetValue("g", out ganador ))
{
    if (ganador.Equals("0"))
    {
        TextBlock1.Text = string.Format(“El ganador es {0}” ,ganador )";
    }
    else
    {
        TextBlock1.Text = "No hay ganador";
       }

}
         base.OnNavigatedTo(e);
     }

Como pueden ver Aquí estamos recibiendo el valor de QueryString y lo almacenamos en una variable llamada ganador en caso de estar lleno envía a un control textblock en la pantalla el nombre del ganador y en caso de estar vacía indicar que no hay ganador.


Deja un comentario

Métodos Async y Await en Silverlight (Programación asincrónica)

En este caso vengo a hablarles un poco sobre métodos Async dentro de lo que es programación asíncrona, estas se incluyen debido a que muchas aplicaciones hoy en día desarrolladas hacen métodos que realizar actividades pesadas y estas a su vez entorpecen el seguimiento de actividades, los métodos asíncronos te permiten que tu aplicación no quede paralizada al momento de ejecutar un método pesado en tu aplicación.

Actualmente con la nueva versión de Framework muchos métodos existentes ya se pueden ejecutar de manera Asíncrona y sabemos de las mismas por que el nombre del método termina con la palabra Async

Pero como convertimos un método síncrono en uno asíncrono… hay que cumplir las siguientes reglas el método sabemos que esta compuesto por un modificador de acceso luego el valor que revuelve, el nombre y los parámetros que requerirá el método algo como esto ejemplo.

public string NombreMetodo(string Parametro 1)

{

}

Este método también puede ser un evento para utilizar un Await hay que seguir unas normas que son las siguientes;

La tarea a la que se aplican al operador await normalmente es el valor devuelto por una llamada a un método que implemente Modelo asincrónico basado Tarea-. Incluir valores de ejemplos Task cualquiera Task<TResult>.

Por tanto si queremos utilizar estos eventos asíncronos debemos seguir esta norma en este caso usaremos un ejemplo sencillo. crearemos nuestro propio método que cumpla con esta norma, estos métodos Asíncronos existen en la nueva versión de Framework, métodos que ya conocemos y han sido ampliados para ejecutarse de manera asíncrona o tu mismo puedes desarrollar tus métodos en este caso usaremos este ejemplo.

public async Task<string> EsperaAsync()
{
    await Task.Delay(10000);
    return "Final";
}

Este método da un retarlo de unos segundos si queremos que nuestro método principal ejecute el mismo y devolver el valor que en un simple string debemos llamar a este método anticipado de un Await.

public string NombreMetodo(string Parametro 1)

{

string result = await EsperaAsync();

}

En este momento el código dará un error por que para poder utilizar el Await hay que colocar luego del modificador de acceso del Método la palabra reservada async.

public async string NombreMetodo(string Parametro 1)

{

string result = await EsperaAsync();

}

Para probar este código es bastante sencillo y lo podemos usar con WPF, Aplicaciones en Windows , Silverlight 5

Construimos una pantalla con un Textbox y con un botón el botón ejecutara el método y este debe mostrar el valor y mientras lo haces veras que puedes hacer cualquier otra función, para no hacer trabajo doble vamos a utilizar el evento click del botón para hacer el await y veras que el los mismo que lo anterior.

.

private async void button1_Click(object sender, EventArgs e)
{
    // Llamar al método asíncrono
    string result = await EsperaAsync();

    // Podríamos llamar a un segundo método.
    //string result = await EsperaAsync();

    // Mostrar el Resultado.
    textBox1.Text += result;
}

Esto es un ejemplo bastante básico y espero los ayude a comprender estos métodos muy útiles para la próxima generación de aplicaciones que ya tenemos en las manos,