Delen via


Hoe: Gebonden gegevens converteren

In dit voorbeeld ziet u hoe u conversie toepast op gegevens die worden gebruikt in bindingen.

Als u gegevens tijdens de binding wilt converteren, moet u een klasse maken waarmee de IValueConverter-interface wordt geïmplementeerd, waaronder de Convert- en ConvertBack-methoden.

Voorbeeld

In het volgende voorbeeld ziet u de implementatie van een datumconversieprogramma waarmee de datumwaarde wordt geconverteerd die is doorgegeven, zodat alleen het jaar, de maand en de dag worden weergegeven. Bij het implementeren van de IValueConverter-interface is het een goede gewoonte om de implementatie te versieren met een ValueConversionAttribute kenmerk om aan te geven aan ontwikkelhulpprogramma's de gegevenstypen die betrokken zijn bij de conversie, zoals in het volgende voorbeeld:

[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

Zodra u een conversieprogramma hebt gemaakt, kunt u het toevoegen als een resource in uw XAML-bestand (Extensible Application Markup Language). In het volgende voorbeeld wordt src toegewezen aan de namespace waarin DateConverter is gedefinieerd.

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

Ten slotte kunt u het conversieprogramma in uw binding gebruiken met behulp van de volgende syntaxis. In het volgende voorbeeld is de tekstinhoud van de TextBlock gebonden aan StartDate, een eigenschap van een externe gegevensbron.

<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}"/>

De stijlresources waarnaar in het bovenstaande voorbeeld wordt verwezen, worden gedefinieerd in een resourcesectie die niet in dit onderwerp wordt weergegeven.

Zie ook