Ejercicio: creación de un convertidor de .NET MAUI
En este ejercicio, agrega un convertidor a la aplicación Tiempo creada en el ejercicio anterior. El primer convertidor convierte un valor de enumeración en un recurso de imagen. El segundo convertidor convierte la temperatura de Fahrenheit a Celsius.
Conversión a una imagen
El contexto de enlace actual de la página de la aplicación Tiempo es un objeto de datos con propiedades que describen la previsión meteorológica. Una de esas propiedades es la condición del cielo, que es una enumeración. Cuando se muestra información meteorológica, la aplicación debe mostrar un icono para facilitar al usuario la visualización de la condición del cielo. Para mostrar estos iconos, la enumeración se debe convertir en un recurso de imagen.
Abra el proyecto Weather Sample del ejercicio anterior en Visual Studio. Si no tiene una copia, puede descargarla desde GitHub.
Agregue una carpeta al proyecto denominado Converters.
Agregue una nueva clase a la carpeta Converters denominada WeatherConditionToImageConverter.cs.
Abra WeatherConditionToImageConverter.cs en el editor de código y reemplace todo el código por el siguiente:
using System.Globalization; using WeatherClient.Models; namespace WeatherClient.Converters; internal class WeatherConditionToImageConverter : IValueConverter { public object? Convert(object? value, Type targetType, object? parameter, CultureInfo culture) { WeatherType weatherCondition = (WeatherType)value!; return weatherCondition switch { Models.WeatherType.Sunny => ImageSource.FromFile("sunny.png"), Models.WeatherType.Cloudy => ImageSource.FromFile("cloud.png"), _ => ImageSource.FromFile("question.png") }; } public object? ConvertBack(object? value, Type targetType, object? parameter, CultureInfo culture) => throw new NotImplementedException(); }
Este código define el convertidor
WeatherConditionToImageConverter
en el espacio de nombresWeatherClient.Converters
. Este convertidor espera la enumeraciónWeatherType
como valor y devuelve un recurso de imagen basado en ese valor.Abra el archivo MainPage.xaml.
En el elemento raíz, agregue un nuevo espacio de nombres XML denominado
cvt
y asígnelo al espacio de nombres .NETWeatherClient.Converters
.<ContentPage xmlns="http://schemas.microsoft.com/dotnet/2021/maui" xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml" xmlns:cvt="clr-namespace:WeatherClient.Converters" x:Class="WeatherClient.MainPage">
Agregue una instancia del convertidor
WeatherConditionToImageConverter
a los recursos de la página, con la clave deWeatherConditionToImageConverter
:<ContentPage ... <ContentPage.Resources> <cvt:WeatherConditionToImageConverter x:Key="WeatherConditionToImageConverter" /> </ContentPage.Resources>
Busque el control
<Image>
enGrid.Row="0"
.Cambie la propiedad
Source="question.png"
al enlace siguiente:Source="{Binding Condition, Converter={StaticResource WeatherConditionToImageConverter}}"
Ejecute el proyecto.
Observe que, al presionar el botón Actualizar, el campo Condición cambia a un icono: