Método Convert
Collapse the table of content
Expand the table of content

IValueConverter.Convert Method

Modifica los datos de origen antes de pasarlos al destino para la presentación en la interfaz de usuario.

Sintaxis


object Convert(
  object value, 
  Type targetType, 
  object parameter, 
  string language
)

Parámetros

value

Tipo: System.Object [.NET] | Platform::Object [C++]

Datos de origen que se pasan al destino.

targetType

Tipo: System.Type [.NET] | TypeName [C++]

Tipo de la propiedad de destino. Esto utiliza un tipo diferente dependiendo de si se está programando con extensiones de componentes de Microsoft .NET o Visual C++ (C++/CX). Vea la sección Comentarios.

parameter

Tipo: System.Object [.NET] | Platform::Object [C++]

Parámetro opcional que se va a utilizar en la lógica del convertidor.

language

Tipo: System.String [.NET] | Platform::String [C++]

Lenguaje de la conversión.

Valor devuelto

Tipo: System.Object [.NET] | Platform::Object [C++]

Valor que se va a pasar a la propiedad de dependencia de destino.

Comentarios

El parámetro targetType del método Convert usa varias técnicas para enviar información del sistema de tipos, dependiendo de si se está programando con .NET o C++/CX.

  • Para .NET, este parámetro pasa una instancia del tipo System.Type.
  • En C++/CX, este parámetro pasa un valor de la estructura TypeName. TypeName::Kind contiene el nombre de cadena simple de tipo, similar a Type.Name de .NET.

Cuando el motor de enlace invoca el convertidor, el valor de targetType se pasa buscando el tipo de propiedad de la propiedad de dependencia de destino. Puede utilizar este valor en su implementación de Convert por uno de estos dos motivos:

  • El convertidor tiene la expectativa de que siempre va a devolver objetos de un tipo específico, y desea comprobar que el enlace para el que se llama al convertidor está usando el convertidor correctamente. En caso contrario, puede que devuelva un valor de reserva, o producir una excepción (pero vea “Excepciones de convertidores” a continuación).
  • El convertidor puede devolver más de un tipo, y desea utilizarlos para informar al convertidor de qué tipo debe devolver. Por ejemplo, podría implementar una conversión de objeto a objeto y una conversión de objeto a cadena dentro del mismo código del convertidor.

El parámetro language procede del valor de ConverterLanguage de un enlace específico, no de valores del sistema, por lo que debe esperar que sea una cadena vacía.

parameter procede del valor ConverterParameter de un enlace específico, y es null de forma predeterminada. Si el convertidor utiliza parámetros para modificar lo que devuelve, esto normalmente requiere alguna convención para validar lo que pasa el enlace y lo que controla el convertidor. Una convención común es pasar cadenas que nombran modos para su convertidor que dan lugar a distintos valores devueltos. Por ejemplo, puede que los modos "Simple" y "Verbose" devuelvan cadenas de longitud distinta adecuadas para la visualización en diferentes diseños y tipos de control de IU.

Excepciones de convertidores

El motor de enlace de datos no detecta excepciones producidas por un convertidor proporcionado por el usuario. Cualquier excepción producida por el método Convert o cualquier excepción no detectada y producida por los métodos a los que llama el método Convert, se tratan como errores en tiempo de ejecución. Si utiliza el convertidor en situaciones donde el enlace puede utilizar reservas o mostrar de otra manera resultados razonables aunque se produzca un error de conversión, piense en que su convertidor devuelva DependencyProperty.UnsetValue y no produzca excepciones. La propiedad DependencyProperty.UnsetValue es un valor centinela que tiene un significado especial en el sistema de propiedades de dependencia y los enlaces a los que se pasa que este usarán la propiedad FallbackValue.

Otra alternativa a las excepciones consiste en devolver el value original sin cambiar y dejar que la instancia de enlace controle lo que controlaría con ese valor. En la mayoría de los casos, los enlaces de interfaz de usuario que den errores no serán casos de error. Simplemente no utilizarán el valor de origen y en su lugar se utilizará DependencyProperty.UnsetValue para no presentar nada, o para utilizar los retrocesos.

try/catch según si se va a hacer algo en value es un patrón de implementación común para el método Convert.

Ejemplos

En el ejemplo siguiente se muestra cómo implementar el método Convert mediante los parámetros parameter y language.


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

IValueConverter
ConvertBack
Ejemplo de enlace de datos XAML
Introducción al enlace de datos

 

 

Mostrar:
© 2016 Microsoft