2010-09-07 14 views
9

Ich habe eine WPF-Datagrid, in der eine der Spalten eine Datumsspalte ist.Festlegen des Standarddatums der WPF-Datumsauswahl auf das aktuelle Datum

So habe ich eine DataTemplateColumn verwendet als

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

Und in meiner Ressource-Datei habe ich den folgenden Code geschrieben:

<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> 

Das Problem ist, wenn ich auf dem Datepicker die Standard-Steuerung klicken Datum ist auf 1/1/0001 festgelegt?

Wie kann ich meinen Datepicker auf das aktuelle Datum setzen?

Antwort

1

Ich glaube, Sie

DisplayDateStart 

mit

DisplayDate 

Da DisplayDateStart ersetzen müssen: (von der MSDN)

Ruft das erste Datum angezeigt werden.

nicht das Datum angezeigt werden.

17

Wenn Sie keine Eigenschaft in Ihrem DataContext namens Now haben, schlägt Ihr Bindings fehl. Stattdessen sollten Sie wie so die {x:Static} Syntax werden:

<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> 

Da DateTime ist nicht im Standard XAML-Namespace, müssen Sie eine xmlns-Deklaration in das Stammelement hinzuzufügen:

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

hier auf Last zeigt es 1/1/0001..it nicht zeigt das aktuelle Datum – GANI

+0

Das sollte funktionieren, aber wenn es nicht funktioniert, können Sie versuchen {Binding Source = {x: Static sys: DateTime.Now}, Mode = OneTime} –

+0

Ich brauche es, um an meine Klasse zu binden. Das ist ein neues Objekt in einer neuen Reihe. Wie würde es funktionieren? – Dani

0

On top of Abe Heidebrecht 's Antwort Ich gebe ein Beispiel. Ich denke, Abes Antwort ist richtig. Ich hatte das gleiche Problem mit dem neuen Objekt und Klasse verbindlich und löste das Problem in der unten genannte Art und Weise:

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

cheers :)

Verwandte Themen