Con la aparición de Windows 8 y su entorno de desarrollo llegaron – entre muchas otras cosas- los contratos. Por medio de los contratos es posible acceder a funcionalidad especializada como la configuración de la aplicación, funciones de compartir y búsqueda.
Con la llegada de Windows 8.1 el contrato de búsqueda ha quedado relevado por el control de búsqueda (SearchBox), con este control la simple implementación que el contrato de búsqueda ofrece ha sido aún más simple de realizar, para demostrar como se usa, vamos a hacer un ejercicio simple.
Crea una nueva solución, y coloca en este proyecto el control de búsqueda.
Agrega algunas propiedades y un manejador de eventos, tal como se muestra en el siguiente código XAML.
<Grid Background="{ThemeResource ApplicationPageBackgroundThemeBrush}"> <earchBox Name="txtBusqueda" HorizontalAlignment="Left" Margin="26,44,0,0" VerticalAlignment="Top" Width="270" Tapped="txtBusqueda_Tapped"/> </Grid> |
Por el lado de C#, antes de poder continuar, necesitamos obviamente crear una lista que tenga los suficientes elementos como para hacer una búsqueda, yo creo que con diez será suficiente por ahora.
protected override void OnNavigatedTo(NavigationEventArgs e) { base.OnNavigatedTo(e); listaPeliculas = new List<Peliculas>(); listaPeliculas.Add(new Peliculas { Titulo = "El rey león", Exhibicion = "1994", Informacion = "http://www.imdb.com/title/tt0110357/", Portada = "/Assets/ReyLeon.jpg" }); listaPeliculas.Add(new Peliculas { Titulo = "Corazón de caballero", Exhibicion = "2001", Informacion = "http://www.imdb.com/title/tt0183790", Portada = "/Assets/Caballero.jpg" }); listaPeliculas.Add(new Peliculas { Titulo = "Escucha tu destino", Exhibicion = "2007", Informacion = "http://www.imdb.com/title/tt0426931", Portada = "/Assets/August.jpg" }); listaPeliculas.Add(new Peliculas { Titulo = "Los vengadores", Exhibicion = "2012", Informacion = "http://www.imdb.com/title/tt0848228/", Portada = "/Assets/Vengadores.jpg" }); listaPeliculas.Add(new Peliculas { Titulo = "El caballero de la noche asciende", Exhibicion = "2012", Informacion = "http://www.imdb.com/title/tt1345836/", Portada = "/Assets/Batman.jpg" }); listaPeliculas.Add(new Peliculas { Titulo = "Los juegos del hambre", Exhibicion = "2013", Informacion = "http://www.imdb.com/title/tt1951264/", Portada = "/Assets/HungerGames.jpg" }); listaPeliculas.Add(new Peliculas { Titulo = "Gigantes de acero", Exhibicion = "2011", Informacion = "http://www.imdb.com/title/tt0433035/", Portada = "/Assets/RealSteel.jpg" }); listaPeliculas.Add(new Peliculas { Titulo = "Robin Hood", Exhibicion = "2010", Informacion = "http://www.imdb.com/title/tt0955308/", Portada = "/Assets/RobinHood.jpg" }); listaPeliculas.Add(new Peliculas { Titulo = "Superman", Exhibicion = "2013", Informacion = "http://www.imdb.com/title/tt0770828/", Portada = "/Assets/Superman.jpg" }); listaPeliculas.Add(new Peliculas { Titulo = "Thor", Exhibicion = "2013", Informacion = "http://www.imdb.com/title/tt1981115/", Portada = "/Assets/ThorDark.jpg" }); } |
Ahora con el evento Tapped de la caja de búsqueda vamos a obtener la cadena d búsqueda y realizar una consulta a la lista en base a ella.
private void txtBusqueda_Tapped(object sender, TappedRoutedEventArgs e) { string tituloBuscado = txtBusqueda.QueryText; List<Peliculas> peliculasSeleccionadas = (from p in listaPeliculas where p.Titulo == tituloBuscado select p).ToList(); } |
Ya tenemos la posibilidad de obtener los resultados, ahora, gracias a las enormes ventajas que LINQ nos ofrece debes de considerar al menos dos escenarios, uno es que el usuario probablemente escriba el título con minúsculas y nosotros no lo tengamos así, el segundo es que el usuario no escriba el título completo. En cualquiera de los dos casos, debemos trabajar por seguir obteniendo el resultado.
private void txtBusqueda_Tapped(object sender, TappedRoutedEventArgs e) { string tituloBuscado = txtBusqueda.QueryText; List<Peliculas> peliculasSeleccionadas = (from p in listaPeliculas where p.Titulo.ToLower() == tituloBuscado.ToLower() || p.Titulo.Contains(tituloBuscado) select p).ToList(); } |
Con la lista obtenida y con este escenario, ahora busca dos casos posibles. Escribe “superman” (todo en minúsculas).
Debes poder obtener un resultado.
Ahora, la razón de que sea una lista la que espera los resultados es porque seguramente una palabra podría ser encontrada en dos o más elementos. Escribe “caballero” para obtener este caso.
El resultado será el siguiente.
Ya tienes una colección, ya tienes tu consulta y por último los resultados obtenidos. ¿Mucho más simple que el contrato de búsqueda no?
Si quieres darle un vistazo al ejercicio, puedes descargarlo aquí.
Muy bueno Amin, de verdad que creí que era más difícil de implementar :/ pero con tu tutorial vi que no.
Gracias