Al desarrollar Aplicaciones hay ocasiones en las que necesitamos guardar ciertos elementos de configuración que nuestros usuarios pueden modificar, por ejemplo, el tamaño de letra, el idioma, el color de fondo, etc. Windows Phone ya trae implementado un lugar donde nosotros podemos hacer eso y es lo que les voy a mostrar ahora

La manera en la que lo probaremos consistirá en una pantalla con 3 controles, un TextBox, un Button y un CheckBox y una segunda pantalla con tres Checkbox en la cual elegiremos que controles Habilitar y cuales no (esta segunda pantalla seria la pantalla de configuración de nuestra App)

Primero creamos un proyecto nuevo de Windows Phone y en la pantalla que nos crea le pondremos esta interfaz.

Pantalla1El Código XAML de la página es el siguiente.

codigoXAML1

Ahora, lo que tenemos ahí es el código XAML de los 3 controles y la ApplicationBar con un botón para ir a la ventana de configuración.

Agregamos una nueva pagina al proyecto y le ponemos “ConfigPage.xaml” a la cual le pondremos la siguiente interfaz.

pantalla2Con el siguiente código XAML.

codigoXAML2Bien, hasta ahorita solo hemos armado lo que es la interfaz de la aplicación por lo que si la corren, no van a hacer nada aún.

Primero vamos a editar la pagina “ConfigPage.xaml“.

Primero que nada, para guardar las preferencias de los usuario haremos uso de la clase “IsolatedStorage” que se encuentra dentro del espacio de nombres “System.IO.IsolatedStorage” por lo que agregaremos el siguiente “using” al proyecto.

using System.IO.IsolatedStorage;

una vez agregando esto ya podemos acceder a la clases para poder guardarlo.

la forma en la que guardaremos las preferencias será cuando el usuario abandone la página, por lo que vamos a sobrecargar el método OnBackKeyPress que se lanza cuando pulsamos la tecla de retroceso que viene en el celular, para eso escribimos lo siguiente.

protected override void OnBackKeyPress(System.ComponentModel.CancelEventArgs e)
{

base.OnBackKeyPress(e);

}

dentro vamos a hacer la “magia” de todo esto, primero vamos a obtener un “diccionario” completo de todas las preferencias o datos que estén guardadas, con este código.

var dic = IsolatedStorageSettings.ApplicationSettings;

en “dic” está el diccionario que necesitamos para guardar todo. La forma en la que trabaja es mediante un sistema de “Key-Value” esto es para cada “key” solo hay un “Valor” y la forma de accederlo es como un arreglo de 1 sola dimensión, por ejemplo:

dir[“Hola”]=25;

donde “Hola” seria la Key y 25 el Valor.

explicando esto, la forma en la que guardaremos las preferencias es guardando si el CheckBox está en “Checked” o no.

dic[“Button”]=cbButton.IsChecked;
dic[“Check”]=cbCheck.IsChecked;
dic[“TextBox”]=cbText.IsChecked;

Algo muy importante es Guardar estos cambios, para lo que utilizaremos el método Save()

dir.Save();

Con esto ya tenemos guardadas las preferencias del usuario el método quedaría así.

metodo1

Ya guardamos, ahora vamos a leerlo para poder restablecer los valores, esto lo haremos sobrecargando el método OnNavigatedTo que es el método que se ejecuta cuando entramos en la página

protected override void OnNavigatedTo(NavigationEventArgs e)
{

base.OnNavigatedTo(e);

}

dentro de este método recuperaremos los datos del directorio mediante la Key que los guardamos pero primero, antes de recuperarlos tenemos que verificar que en realidad exista la key para que no nos tire alguna excepción en el caso de que nunca hayamos guardado nada (como es el caso cuando la aplicación es lanzada por primera vez después de instalarse).

var dic = IsolatedStorageSettings.ApplicationSettings;
if(dic.Contains(“Button”))

Con el método Contrains verificamos si esa Key existe o no, en caso de que exista ya podemos trabajar con ella. Si existe, usaremos el valor almacenado para determinar si el CheckBox está Checked o no, si no existe, lo dejaremos como está por default.

cbButton.IsChecked = (bool)dic[“Button”];

Una cosa importante es que hay que hacer un Cast  para asignar el valor ya que se guarda como un objeto y hay que convertirlo antes de asignarlo. Haciendo esto para cada una de las 3 llaves que guardamos nos queda el siguiente código.

metodo2

Con esto terminamos la página de configuración, ahorita solo recordamos las preferencias del usuario en la misma página de preferencias para que cada vez que el usuario entre, solo cambie la opción que no le guste y las demás las deje igual. Lo siguiente es trabajar con ellas fuera de la página de preferencias, esto es en la MainPage.xaml que es ahí donde tenemos los 3 controles que vamos a Habilitar/Deshabilitar según las preferencias de la App.

bien, en esta página primero vamos a hacer que podamos ir a la página de Configuración usando el botón de la ApplicationBar, para eso escribiremos la siguientes lineas de código.

metodo3Con el cual podemos navegar entre las distintas páginas que tenga nuestra aplicación, ahora si lo bueno, al igual que en la página anterior vamos a hacer uso del método OnNavigatedTo para leer nuestras preferencias y aplicarlas.

metodo4Con esto, según la selección de nuestra página de Configuración los controles estarán habilitados o no.

Así es como termina esto, ya depende de uds la cantidad de datos que van a guardar y cuando los van a leer y para que los van a utilizar, una buena idea para esto, es usarlas para cuando se deja la app en segundo plano y quieres guardar la posición actual de la app, por ejemplo si estas reproduciendo una película y entra una llamada o el usuario cambia de aplicación para ver otra y al regresar no tener que volver a empezar el vídeo  solo se guarda el minuto y segundo donde se quedo y se restablece al volver a la app.

Aquí el proyecto funcionado con VS2012 y el SDK de WinPho8

https://www.dropbox.com/s/ku9t4wlmtydjl1i/WinPoConfig.rar

Recuerden darle Like a mi página de Facebook https://www.facebook.com/pages/ProgramFeels/199922476767497?fref=ts

Saludos.