2010-12-27 36 views
12

Cuando mis usuarios seleccionan una fecha mediante el control Calander dentro del DatePicker, el valor se enlaza correctamente al objeto subyacente. PERO, si el usuario escribe la fecha dentro del DatePicker, luego hace clic en un botón, el texto no se establece en la propiedad SelectedDate.DatePicker.SelectedDate no cambia cuando se ingresa texto

El usuario tiene que quitar el cursor del TextBox dentro del DatePicker para que se actualice el objeto enlazado.

<toolkit:DatePicker Name="_dpField" Grid.Column="1" MinWidth="100" 
       ToolTip="{Binding Path=ToolTipText}" 
       TextInput="_dpField_TextInput" 
       SelectedDate="{Binding Path=Value, UpdateSourceTrigger=PropertyChanged, Mode=TwoWay}"/> 

HELP! ¿Cómo me aseguro de que este valor tipeado se use dentro del código de evento de botones?

Gracias!

Respuesta

5

Se puede utilizar un convertidor para analizar el texto escrito a una fecha y hora válida

Muestra

public object Convert(object value, Type targetType, object parameter, CultureInfo culture) 
    { 
     string strValue = System.Convert.ToString(value); 
     DateTime resultDateTime; 
     if (DateTime.TryParse(strValue, out resultDateTime)) 
     { 
      return resultDateTime; 
     } 
     return value; 

    } 

Xaml

 <Controls:DatePicker 
    Text="{Binding OrderDate,Mode=TwoWay,UpdateSourceTrigger=PropertyChanged}" 
    SelectedDate="{Binding RelativeSource={RelativeSource Self},Path=Text, 
    Converter={StaticResource DateConverter}}"> 
+0

Gotcha, puedo hacer eso. Solo tengo curiosidad por saber por qué el enlace para la fecha seleccionada solo se produce cuando borro el cuadro de texto del selector de fecha. Creo que necesito hacer otra pregunta sobre el evento click con WPF, y por qué no hace que el enlace empuje el valor hasta el objeto encuadernado antes de que se active el evento para el clic del botón. gracias por la ayuda –

+0

** Update ** acaba de implementar el convertidor, y funciona.ahora para comenzar una nueva pregunta sobre el modo de enlace y hacer clic en eventos. –

17

he encontrado una solución más fácil en el que Don No es necesario el DateConverter.

Solo estoy vinculado a la propiedad Text y uso TargetNullValue=''.

<DatePicker x:Name = "dpDisbursementDate" 
      Text = "{Binding NameOfMyProperty, Mode=TwoWay,  
      UpdateSourceTrigger=PropertyChanged, ValidatesOnDataErrors=True, 
      TargetNullValue=''}"/> 
+0

que es muy astuto! –

+0

¡Eso es absolutamente brillante! Funciona como un encanto para mí. –

+2

Esta respuesta parece solucionar el problema original, pero hay otro problema peligroso que no es inmediatamente evidente: los diferentes formatos de fecha no se analizan correctamente. Soy de Finlandia y utilizamos el formato dd.mm.yyyy. Esta implementación analizó la fecha actual el 9 de diciembre de 2014 como el 11 de septiembre de 2014. –

1

La única solución que he podido encontrar es desactivar entrada de la fecha en el Selector de fechas mediante el establecimiento de Focusable="False" y sólo permite la selección del calendario. De esta forma, al menos podemos asegurarnos de obtener la fecha correcta.

-2

Esto es probablemente un poco tarde, pero he estado atascado en esto desde hace un tiempo.

Si tiene otro elemento WPF puede cambiar el foco a eso al comienzo de su evento de presionar el botón, esto hará que el marcador de fecha procese cualquier texto ingresado en su cuadro de texto. Solo he intentado esto con un combobox pero parece funcionar y te permite tener un formato personalizado en tus fechas (es decir, 26/04/2016 en lugar de 26/04/2016). Supongo que también podría usar un elemento invisible si no tiene algo para cambiar el enfoque.

private void btnInbound_Complete_Click(object sender, RoutedEventArgs e) 
    { 
     if (Validation()) 
     { 
      comboInbound_Result.Focus();//THIS IS SO THAT ANY MANUAL DATEPICKER ENTRY IS ACCEPTED BEFORE THE REST OF THE BUTTON CODE IS RUN 
      SQLinbound_CompleteItem(); 
      ClearAll(); 
     } 
    } 
0

Aquí una solución sencilla, que me ayudó incluso con el formato de fecha europeo/alemán "dd.MM.yyyy".

Añadir a su xaml elemento raíz

xml:lang="de-AT" 

y el selector de fechas se parece a esto:

<DatePicker SelectedDate="{Binding PropertyName, StringFormat=dd.MM.yyyy}" Name="datePicker" /> 

esperemos que funcione para usted!

Cuestiones relacionadas