IValueConverter Interface

Expone métodos que permiten que los datos se modifiquen cuando pasan por el motor de enlace.

Sintaxis


public interface IValueConverter

Atributos

[Version(0x06020000)]
[WebHostHidden()]

Members

A continuación se indican los tipos de miembros de IValueConverter (Interfaz):

Métodos

The IValueConverter Interfaz tiene estos métodos. También hereda métodos de Object Clase.

MétodoDescripción
Convert Modifies the source data before passing it to the target for display in the UI.
ConvertBack Modifies the target data before passing it to the source object. This method is called only in TwoWay bindings.

 

Comentarios

Puede crear una clase que permite convertir el formato de los datos entre el origen y el destino heredando de IValueConverter. Por ejemplo, es posible que desee tener una lista de colores que almacene como valores RGBA pero los muestre con nombres de colores en la interfaz de usuario. Al implementar Convert y ConvertBack, puede cambiar el formato de los valores de datos mientras se pasan entre el destino y el origen por el motor de enlace.

Siempre debe implementar Convert con una implementación funcional, pero es bastante común implementar ConvertBack de forma que notifique una excepción no implementada. Solo necesita un método ConvertBack en el convertidor si utiliza el convertidor para enlaces bidireccionales o si utiliza XAML para la serialización.

Nota  El enlace de datos a un convertidor de valores personalizados escrito en extensiones de componentes de Visual C++ (C++/CX), el archivo de encabezado en el que se define la clase de implementación de IValueConverter debe incluir, directa o indirectamente, de código- detrás de los archivos. Para obtener más información, vea Crear la primera aplicación de la Tienda Windows mediante C++.

Sugerencia  Algunas plantillas de proyecto predeterminadas para una aplicación de la Tienda Windows incluyen una clase auxiliar, BooleanToVisibilityConverter. Esta clase es una implementación de IValueConverter que administra un escenario común de controles personalizados donde se utilizan valores booleanos de la clase de la lógica de control para establecer el valor Visibility en las plantillas de control XAML.

Notas sobre la migración

En Windows en tiempo de ejecución, los parámetros de idioma para los métodos IValueConverter usan cadenas, no objetos CultureInfo como en las definiciones de la interfaz de Windows Presentation Foundation (WPF) y Microsoft Silverlight.

Ejemplos

En el ejemplo siguiente se muestra cómo implementar la interfaz IValueConverter y utilizar el convertidor cuando se enlaza a datos una colección de objetos.

Importante  Si está codificando en C++/CX, quite el atributo ConverterParameter del último TextBlock, porque ese valor de cadena determinado es específico del formato de la cadena de Microsoft .NET. Todo el elemento debe ser similar a lo siguiente: <TextBlock Text="{Binding Path=ReleaseDate, Mode=OneWay, Converter={StaticResource FormatConverter}}" />.


<UserControl x:Class="ConverterParameterEx.Page"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
    xmlns:local="using:ConverterParameterEx" 
    Width="400" Height="300">
    <Grid x:Name="LayoutRoot" >
        <Grid.Resources>
           <local:DateFormatter x:Key="FormatConverter" />
        </Grid.Resources>
        
        <ComboBox Height="60" Width="250" x:Name="MusicCombo" 
            ItemsSource="{Binding}">
            <ComboBox.ItemTemplate>
                <DataTemplate>
                    <StackPanel>
                        <TextBlock FontWeight="Bold" Text="{Binding Path=Name, Mode=OneWay}" />
                        <TextBlock Text="{Binding Path=Artist, Mode=OneWay}" />
                        <TextBlock Text="{Binding Path=ReleaseDate, Mode=OneWay,
                            Converter={StaticResource FormatConverter}, 
                            ConverterParameter=\{0:d\}}" />
                   </StackPanel>
                </DataTemplate>
            </ComboBox.ItemTemplate>
        </ComboBox>
    </Grid>
</UserControl>



using System;
using System.Collections.ObjectModel;
using System.Globalization;
using Windows.UI.Xaml.Controls;
using Windows.UI.Xaml.Data;

namespace ConverterParameterEx
{
    public partial class Page : UserControl
    {

        public ObservableCollection<Recording> MyMusic =
            new ObservableCollection<Recording>();
        public Page()
        {
            InitializeComponent();

            // Add items to the collection.
            MyMusic.Add(new Recording("Chris Sells", "Chris Sells Live",
                new DateTime(2008, 2, 5)));
            MyMusic.Add(new Recording("Luka Abrus",
                "The Road to Redmond", new DateTime(2007, 4, 3)));
            MyMusic.Add(new Recording("Jim Hance",
                "The Best of Jim Hance", new DateTime(2007, 2, 6)));

            // Set the data context for the combo box.
            MusicCombo.DataContext = MyMusic;
        }
    }

    // Simple business object.
    public class Recording
    {
        public Recording() { }
        public Recording(string artistName, string cdName, DateTime release)
        {
            Artist = artistName;
            Name = cdName;
            ReleaseDate = release;
        }
        public string Artist { get; set; }
        public string Name { get; set; }
        public DateTime ReleaseDate { get; set; }
    }

    public class DateFormatter : IValueConverter
    {
        // This converts the DateTime object to the string to display.
        public object Convert(object value, Type targetType, 
            object parameter, string language)
        {
            // Retrieve the format string and use it to format the value.
            string formatString = parameter as string;
            if (!string.IsNullOrEmpty(formatString))
            {
                return string.Format(
                    new CultureInfo(language), formatString, value);
            }
            // If the format string is null or empty, simply call ToString()
            // on the value.
            return value.ToString();
        }

        // No need to implement converting back on a one-way binding 
        public object ConvertBack(object value, Type targetType, 
            object parameter, string language)
        {
            throw new NotImplementedException();
        }
    }
}


Requisitos

Cliente mínimo admitido

Windows 8

Servidor mínimo admitido

Windows Server 2012

Espacio de nombres

Windows.UI.Xaml.Data
Windows::UI::Xaml::Data [C++]

Metadatos

Windows.winmd

Vea también

Binding
Ejemplo de enlace de datos XAML
Introducción al enlace de datos

 

 

Mostrar:
© 2014 Microsoft