Share via


Cómo: Convertir datos enlazados

En este ejemplo se muestra cómo aplicar la conversión a los datos que se usan en enlaces.

Para convertir datos durante el enlace, debe crear una clase que implemente la interfaz IValueConverter, que incluye los métodos Convert y ConvertBack.

Ejemplo

En el ejemplo siguiente se muestra la implementación de un convertidor de fechas que convierte el valor de fecha pasado para que solo muestre el año, el mes y el día. Al implementar la interfaz IValueConverter, se recomienda decorar la implementación con un atributo ValueConversionAttribute para indicar a las herramientas de desarrollo los tipos de datos implicados en la conversión, como en el ejemplo siguiente:

[ValueConversion(typeof(DateTime), typeof(String))]
public class DateConverter : IValueConverter
{
    public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
    {
        DateTime date = (DateTime)value;
        return date.ToShortDateString();
    }

    public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
    {
        string strValue = value as string;
        DateTime resultDateTime;
        if (DateTime.TryParse(strValue, out resultDateTime))
        {
            return resultDateTime;
        }
        return DependencyProperty.UnsetValue;
    }
}
Public Class DateConverter
    Implements System.Windows.Data.IValueConverter

    Public Function Convert(ByVal value As Object,
                            ByVal targetType As System.Type,
                            ByVal parameter As Object,
                            ByVal culture As System.Globalization.CultureInfo) _
             As Object Implements System.Windows.Data.IValueConverter.Convert

        Dim DateValue As DateTime = CType(value, DateTime)
        Return DateValue.ToShortDateString

    End Function

    Public Function ConvertBack(ByVal value As Object,
                                ByVal targetType As System.Type,
                                ByVal parameter As Object,
                                ByVal culture As System.Globalization.CultureInfo) _
            As Object Implements System.Windows.Data.IValueConverter.ConvertBack

        Dim strValue As String = value
        Dim resultDateTime As DateTime
        If DateTime.TryParse(strValue, resultDateTime) Then
            Return resultDateTime
        End If
        Return DependencyProperty.UnsetValue

    End Function
End Class

Una vez que haya creado un convertidor, puede agregarlo como un recurso en el archivo del lenguaje XAML. En el ejemplo siguiente, src se asigna al espacio de nombres en el que se define DateConverter.

<src:DateConverter x:Key="dateConverter"/>

Por último, puede usar el convertidor en el enlace mediante la sintaxis siguiente. En el ejemplo siguiente, el contenido de texto de TextBlock está enlazado a StartDate, que es una propiedad de un origen de datos externo.

<TextBlock Grid.Row="2" Grid.Column="0" Margin="0,0,8,0"
           Name="startDateTitle"
           Style="{StaticResource smallTitleStyle}">Start Date:</TextBlock>
<TextBlock Name="StartDateDTKey" Grid.Row="2" Grid.Column="1" 
    Text="{Binding Path=StartDate, Converter={StaticResource dateConverter}}" 
    Style="{StaticResource textStyleTextBlock}"/>

Los recursos de estilo a los que se hace referencia en el ejemplo anterior se definen en una sección de recursos que no se muestra en este tema.

Vea también