Dela via


Gör så här: Konvertera bundna data

Det här exemplet visar hur du tillämpar konvertering på data som används i bindningar.

Om du vill konvertera data under bindningen måste du skapa en klass som implementerar IValueConverter-gränssnittet, som innehåller metoderna Convert och ConvertBack.

Exempel

I följande exempel visas implementeringen av en datumkonverterare som konverterar det datumvärde som skickades in så att det bara visar året, månaden och dagen. När du implementerar IValueConverter-gränssnittet är det en bra idé att dekorera implementeringen med ett ValueConversionAttribute-attribut som anger för utvecklingsverktyg vilka datatyper som ingår i konverteringen, som i följande exempel:

[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

När du har skapat en konverterare kan du lägga till den som en resurs i XAML-filen (Extensible Application Markup Language). I följande exempel mappar src till namnområdet där DateConverter- definieras.

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

Slutligen kan du använda konverteraren i bindningen med hjälp av följande syntax. I följande exempel är textinnehållet i TextBlock bundet till StartDate, som är en egenskap för en extern datakälla.

<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 formatresurser som refereras i exemplet ovan definieras i ett resursavsnitt som inte visas i det här avsnittet.

Se även