none
Excepcion en TextBox dentro de un DataTemplate RRS feed

  • Pregunta

  • Hola a todos.

    En mi proyecto tengo un ListView con varios textbox y combobox dentro de él. Hoy al modificar un valor para hacer una prueba veo lo siguiente:


    De donde sale esa excepcion ? Nunca lo habia visto y no se si se puede modificar para mostrar un mensaje que yo quiera. He de decir que yo no controlo que cuando se termine de escribir la cadena sea correcta, lo esta haciendo el textbox solo.

    Un saludo

    EDIT:

    Me acabo de dar cuenta de que al modificar ese campo me cambia el dia por el mes. Lo tengo declarado asi en el XAML:

    <DataTemplate>
     <TextBox x:Name="fecha" Text="{Binding fecha,  StringFormat='dd-MM-yyyy'}" Width="70" LostFocus="fecha_LostFocus"  />
     </DataTemplate>
    No se por que esta haciendo eso, en el evento LostFocus no hago nada para reordenarlos asi que no entiendo que esta pasando



    • Editado Jk_rod martes, 15 de marzo de 2016 11:06
    martes, 15 de marzo de 2016 9:26

Todas las respuestas

  • Me parece que el mensaje de error viene del hecho de que el data binding trata de convertir lo que el usuario digita al tipo de datos de la propiedad a la cual está ligado el control, en este caso a una propiedad llamada "fecha" que supongo es de tipo DateTime.

    Jose R. MCP
    Code Samples

    martes, 15 de marzo de 2016 15:31
  • Me parece que el mensaje de error viene del hecho de que el data binding trata de convertir lo que el usuario digita al tipo de datos de la propiedad a la cual está ligado el control, en este caso a una propiedad llamada "fecha" que supongo es de tipo DateTime.

    Jose R. MCP
    Code Samples

    Y por que al modificarlo se me cambia el dia por el mes ? Es decir si en principio sale "05-04-2017" y yo lo cambio a "06-04-2017" cuando cambio de TextBox automaticamente se convierte a "04-06-2017". Solo me pasa con dia y mes.
    miércoles, 16 de marzo de 2016 9:09
  • Ciertamente interesante.  En cuanto tenga un momento haré una prueba y le cuento lo que encuentro.  ¿Es Silverlight o es WPF?

    Jose R. MCP
    Code Samples

    miércoles, 16 de marzo de 2016 13:26
  • Ciertamente interesante.  En cuanto tenga un momento haré una prueba y le cuento lo que encuentro.  ¿Es Silverlight o es WPF?

    Jose R. MCP
    Code Samples

    Wpf, en la tabla de mysql es del tipo Date por si sirve de ayuda
    miércoles, 16 de marzo de 2016 15:20
  • Ok, después de probar y leer un poco, llego a la conclusión de que StringFormat no tiene ingerencia alguna en cuanto a cómo se interpreta un valor digitado.  StringFormat se usa únicamente para mostrar el valor.  Nada más.

    ¿Qué es lo que se usa para validar lo que se digita?  Aparentemente siempre es la cultura en-US, según leí.  Para usar otra cultura, hay que usar el código siguiente en App.xaml.cs:

        public partial class App : Application
        {
            protected override void OnStartup(StartupEventArgs e)
            {
                base.OnStartup(e);
                FrameworkElement.LanguageProperty.OverrideMetadata(
                    typeof(FrameworkElement),
                    new FrameworkPropertyMetadata(
                        System.Windows.Markup.XmlLanguage.GetLanguage(new CultureInfo("es-CR").IetfLanguageTag)
                    )
                );
            }
        }
    

    Aquí yo uso la cultura es-CR porque esa cultura establece que el día va antes que el mes.  Si lo hago así entonces digitar una fecha dentro del DataTemplate del ListBox se interpreta como se espera.

    Después de ver eso, me parece que el uso de StringFormat para establecer un formato específico no vale la pena, al menos no para fechas o cualquier cosa que dependa de la cultura.  Pienso que lo mejor es crear un converter.


    Jose R. MCP
    Code Samples

    miércoles, 16 de marzo de 2016 21:36
  • Ok, después de probar y leer un poco, llego a la conclusión de que StringFormat no tiene ingerencia alguna en cuanto a cómo se interpreta un valor digitado.  StringFormat se usa únicamente para mostrar el valor.  Nada más.

    ¿Qué es lo que se usa para validar lo que se digita?  Aparentemente siempre es la cultura en-US, según leí.  Para usar otra cultura, hay que usar el código siguiente en App.xaml.cs:

        public partial class App : Application
        {
            protected override void OnStartup(StartupEventArgs e)
            {
                base.OnStartup(e);
                FrameworkElement.LanguageProperty.OverrideMetadata(
                    typeof(FrameworkElement),
                    new FrameworkPropertyMetadata(
                        System.Windows.Markup.XmlLanguage.GetLanguage(new CultureInfo("es-CR").IetfLanguageTag)
                    )
                );
            }
        }

    Aquí yo uso la cultura es-CR porque esa cultura establece que el día va antes que el mes.  Si lo hago así entonces digitar una fecha dentro del DataTemplate del ListBox se interpreta como se espera.

    Después de ver eso, me parece que el uso de StringFormat para establecer un formato específico no vale la pena, al menos no para fechas o cualquier cosa que dependa de la cultura.  Pienso que lo mejor es crear un converter.


    Jose R. MCP
    Code Samples

    Te refieres a crear un conversor de "dd-mm-yyyy hora" a "dd-mm-yyyy" ?
    jueves, 17 de marzo de 2016 8:44
  • Me refiero a un value converter para XAML data binding.  Vea este tutorial.  Es fácil:  Es una clase que implementa IValueConverter, que básicamente son 2 métodos.

    Jose R. MCP
    Code Samples

    jueves, 17 de marzo de 2016 13:29