2010-09-07 18 views
9

Tengo una cuadrícula de datos WPF en la que una de las columnas es una columna de fecha.Establecer la fecha predeterminada del selector de fecha WPF en la fecha actual

así que he utilizado un DataTemplateColumn de la siguiente manera

<my:DataGridTemplateColumn 
    CellTemplate="{StaticResource EffDateDateTimePickerControl}" 
    CellEditingTemplate="{StaticResource addrEffDate}" 
    Header="Effective Date"/> 

Y en mi archivo de recursos que he escrito el siguiente código:

<Style TargetType="{x:Type my:Calendar}" x:Key="CalenderControlTemplate"> 
    <Setter Property="Template"> 
     <Setter.Value> 
      <ControlTemplate TargetType="my:Calendar" > 
       <my:CalendarItem Name="myCalendarItem" 
           Background="White" 
           BorderBrush="Black" 
           BorderThickness="1" 
           VerticalAlignment="Center" /> 
      </ControlTemplate> 
     </Setter.Value> 
    </Setter> 
</Style> 

<DataTemplate x:Key="EffDateDateTimePickerControl"> 
    <Label x:Name="lblEffDate" Content="{Binding effectiveDate,Mode=TwoWay}" ></Label> 
</DataTemplate> 

<DataTemplate x:Key="addrEffDate"> 
    <my:DatePicker x:Name="dpEffDate" Text="{Binding Path=effectiveDate,Mode=TwoWay}" 
        SelectedDate="{Binding Now}" DisplayDateStart="{Binding Now}" 
        CalendarStyle="{DynamicResource CalenderControlTemplate}" /> 
</DataTemplate> 

El problema es cuando hago clic en el Selector de fechas controlar el valor por defecto la fecha se establece en 1/1/0001?

¿Cómo puedo configurar mi datepicker para establecer en la fecha actual.

Respuesta

1

creo que es necesario sustituir

DisplayDateStart 

con

DisplayDate 

Debido DisplayDateStart: (desde el MSDN)

Obtiene o define la primera fecha que se mostrará.

No es la fecha para mostrar.

17

A menos que tenga una propiedad en su DataContext llamada Now, su Bindings fallará. En su lugar, usted debe utilizar la sintaxis {x:Static} así:

<DataTemplate x:Key="addrEffDate"> 
    <my:DatePicker x:Name="dpEffDate" Text="{Binding Path=effectiveDate,Mode=TwoWay}" 
        SelectedDate="{x:Static sys:DateTime.Now}" DisplayDateStart="{x:Static sys:DateTime.Now}" 
        CalendarStyle="{DynamicResource CalenderControlTemplate}" /> 
</DataTemplate> 

Desde DateTime no está en el espacio de nombres XAML estándar, es necesario agregar una declaración xmlns al elemento raíz:

<UserControl xmlns:sys="clr-namespace:System;assembly=mscorlib" ... 
+1

aquí en la carga Muestra 1/1/0001..it no lo hace muestra la fecha actual – GANI

+0

Eso debería funcionar, pero si no lo hace, puede intentar hacer {Binding Source = {x: Static sys: DateTime.Now}, Mode = OneTime} –

+0

Lo necesito para enlazar a mi clase. este es un objeto nuevo en una nueva fila, entonces, ¿cómo funcionaría? – Dani

0

En principio de la respuesta de Abe Heidebrecht. Proporciono un ejemplo. Creo que la respuesta de Abe es correcta. Yo tenía el mismo problema con el nuevo objeto y la clase de unión y resolvió el problema en la forma mencionada a continuación:

get 
{ 
    return (ClassDate - DateTime.MinValue).TotalDays == 0 ? DateTime.Now :ClassDate; 
} 

aplausos :)

Cuestiones relacionadas