none
converter en formato fecha RRS feed

  • Pregunta

  • Hola,
    he creado esta pregunta como continuacion de otra mas antigua
    Mi problema es que  para solucionar el problema de formato en un campo TEXBLOCK lo he solucionado siguiendo consejos de un compañero:
    <
    TextBlock
     Text
    ="{Binding StringFormat='d/M/yyyy'}"
    />
    
    es una solucion fàcil, el problema lo tengo que el formato es solamente Oneway, para poder entrar datos me hace falta un converter...
    ¿alguien me podria poner un ejemplo?
    o orientarme un poco....

    Gracias
    sábado, 19 de septiembre de 2009 22:01

Respuestas

  • Hola Spandau,

    A continuacion te presento la lista de pasos que debes seguir para implementar una clase de conversion:

    1. Crea un clase que implemente IValueConverter
    2. Luego implementa el metodo Converter, este metodo te va permitir modificar  el valor proveniente del origen,  hacia el destino.
    3. Luego Implementa el metodo Converterback, este metodo realiza la misma tarea pero en sentido opuesto.

    Te muestro un pequeño grafico que ilustra estos pasos:

      Objeto Origen                          Value Converter                          Objeto Destino
    (Data,Servicio,Lista)                                                                        (Capa de presentacion)


                 Property ------------------>  Converter() ---------------------->Dependency  Property
                              <------------------ ConverterBack()<------------------




    Tambien se paso un codigo ejemplo de la clase Converter:


    public

     

    class ConversionFecha:IValueConverter

    {

    #region

     

    IValueConverter Members

     

    public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)

    {

     

     

    DateTime valor = (DateTime)value;

     

    return valor.ToShortDateString();

    }

     

    public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)

    {

     

    string fecha = value.ToString();

     

    DateTime valor;

     

    DateTime.TryParse(fecha, out valor);

     

    return valor;

    }

    #endregion

    }


    El codigo XAML para la declaracion de la clase

    1.Declara el Namespace en el XAML

     xmlns

     

    :App="clr-namespace:UIControlPersonal"


    2. Crea el objeto en la seccion de recursos de la forma o control:

    <

     

    Window.Resources>

     

     

    <App:ConversionFecha x:Key="ConversionFecha"/>

    </

     

    Window.Resources>

    3. Asocia el objeto creado con el control que se desea utilizar para presentar la fecha:

    <

     

    Label Content="{Binding Path=FechaIngreso , Converter={StaticResource ConversionFecha}}" x:Name="lblFechaIngreso"/>


    Saludos espero que este codigo te ayude


    Sergio Toro
    • Marcado como respuesta Spandau jueves, 16 de septiembre de 2010 22:34
    martes, 29 de septiembre de 2009 19:22

Todas las respuestas

  • Hola spandau en mi blog te lo explico con un ejemplo http://geeks.ms/blogs/oalvarez/archive/2009/07/20/ivalueconverter-una-interfaz-muy-util-en-el-databinding-de-wpf.aspx Espero que te sirva
    Oscar Avarez Guerras - Arquitecto Software en I3B (I+D+I) Blog:http://geeks.ms/blogs/oalvarez Por favor marca como respuesta si te ha ayudado esta respuesta
    domingo, 20 de septiembre de 2009 6:51
  • Hola Bialguos,
    no tengo muy claros los conceptos...
    he estado mirando tu ejemplo y no entiendo el origen del ageConverter al cual haces referencia que es...
    a ver si me ayudas a mejorar conceptos:

    mi linea de declaracion del texbox  enm xaml es este:
       <TextBox Background="PowderBlue" Margin="5" FontFamily="calibri"  HorizontalContentAlignment="Center" FontSize="20" Foreground="Black" Height="30" MaxHeight="30" MinWidth="120" Name="TEX_DATA_NAIXEMENT" Width="100">
                            <Binding StringFormat=' d/M/yyyy' Path="data_naixement" Mode="OneWay"></Binding>
    en tu ejemplo no acabo de ver claro como funciona....

     

    [ValueConversion(/*sourceType*/
     typeof
    (int
    ), 
    /*targetType*/ typeof (Brush))]
    public class AgeToForegroundConverter : IValueConverter {
    public object Convert(object value , Type targetType, ...) {
    if ( targetType != typeof (Brush) ) { return null ; }
    int age = int .Parse(value .ToString( ));
    return (age > 25 ? Brushes.Red : Brushes.Black);
    }
    }
    public object ConvertBack(object value ,
    Type targetType, ...) {
    throw new NotImplementedException( );
    }
    }
    <!-- Window1.xaml -->
    < Window ... xmlns :local ="clr-namespace:WithBinding" >
    < Window.Resources >
    < local :Person x :Key ="Tom" ... />
    < local :AgeToForegroundConverter x :Key ="ageConverter" />
    </ Window.Resources >
    < Grid DataContext ="{StaticResource Tom}" >
    ...
    < TextBox
    Text ="{Binding Path=Age}"
    Foreground ="
    {Binding
    Path=Age,
    Converter={StaticResource ageConverter}}"

    ... />
    ...
    < Button ...
    Foreground ="{Binding Path=Foreground,
    ElementName=ageTextBox}"
    > Birthday</ Button >
    </ Grid >
    </ Window >
    en mi caso que solamente quiero cambiar el formato fecha para introducir fechas ....ya que el
    StringFormat=' d/M/yyyy'
      no me permite...  como lo hago??

    gracias.

    lunes, 21 de septiembre de 2009 23:26
  • Hola spandau, como estas ?

    mira esta es la manera correcta de usar un convertidor de datos.


    using System.Windows.Data;

     public class PorcentajeValueConvert : IValueConverter
        {
            #region IValueConverter Members

            public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
            {
                if (targetType != typeof(string)) throw new NotImplementedException(); ;
                if (value != null)
                {
                    Single d = Single.Parse(value.ToString());
                    System.Globalization.CultureInfo c = new System.Globalization.CultureInfo("es-CO");
                    return d.ToString("p", c);
                }
                else
                {
                    return "N.D.";
                }
            }

            public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
            {
                throw new NotImplementedException();
            }

            #endregion
        }

    ahora debe crear la siguiente clave de recurso ya sea local o global, local en silverlight seria asi:

    <UserControl.Resources>
    <my:PorcentajeValueConvert x:Key="PorcentajeValue" />
    <UserControl.Resources/>

    <TextBlock Text="{Binding Mode=OneWay, Converter={StaticResource PorcentajeValue}, Path=Dato}" />

    dentro del XAML no se te olvide realizar la respectiva importacion del espacio de nombre de tu proyecto     xmlns:my="clr-namespace:proyecto"


    para más información sobre silverlight ingresa a http://www.frameworkla.net/silverlight.aspx

    saludos,


    MANUEL FERNANDO
    frameworkla.net

    martes, 29 de septiembre de 2009 12:27
  • Hola Spandau,

    A continuacion te presento la lista de pasos que debes seguir para implementar una clase de conversion:

    1. Crea un clase que implemente IValueConverter
    2. Luego implementa el metodo Converter, este metodo te va permitir modificar  el valor proveniente del origen,  hacia el destino.
    3. Luego Implementa el metodo Converterback, este metodo realiza la misma tarea pero en sentido opuesto.

    Te muestro un pequeño grafico que ilustra estos pasos:

      Objeto Origen                          Value Converter                          Objeto Destino
    (Data,Servicio,Lista)                                                                        (Capa de presentacion)


                 Property ------------------>  Converter() ---------------------->Dependency  Property
                              <------------------ ConverterBack()<------------------




    Tambien se paso un codigo ejemplo de la clase Converter:


    public

     

    class ConversionFecha:IValueConverter

    {

    #region

     

    IValueConverter Members

     

    public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)

    {

     

     

    DateTime valor = (DateTime)value;

     

    return valor.ToShortDateString();

    }

     

    public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)

    {

     

    string fecha = value.ToString();

     

    DateTime valor;

     

    DateTime.TryParse(fecha, out valor);

     

    return valor;

    }

    #endregion

    }


    El codigo XAML para la declaracion de la clase

    1.Declara el Namespace en el XAML

     xmlns

     

    :App="clr-namespace:UIControlPersonal"


    2. Crea el objeto en la seccion de recursos de la forma o control:

    <

     

    Window.Resources>

     

     

    <App:ConversionFecha x:Key="ConversionFecha"/>

    </

     

    Window.Resources>

    3. Asocia el objeto creado con el control que se desea utilizar para presentar la fecha:

    <

     

    Label Content="{Binding Path=FechaIngreso , Converter={StaticResource ConversionFecha}}" x:Name="lblFechaIngreso"/>


    Saludos espero que este codigo te ayude


    Sergio Toro
    • Marcado como respuesta Spandau jueves, 16 de septiembre de 2010 22:34
    martes, 29 de septiembre de 2009 19:22
  • Gracias Sergio Toro,
    muy util tu ejemplo y toda tu informacion...
    un dia de esta semana lo pruebo y te digo como va.
    SAludos
    lunes, 19 de octubre de 2009 0:33