2010-09-07 5 views
9

У меня есть Datagrid WPF, в котором один из столбцов является столбцом даты.Установите дату по умолчанию WPF Date Picker на текущую дату

Так я использовал DataTemplateColumn следующим образом

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

И в моем файле ресурсов я написал следующий код:

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

Проблема заключается в том, когда я нажимаю на DatePicker управления по умолчанию дата установлена ​​на 1/1/0001?

Как я могу установить дату, установленную для текущей даты.

ответ

1

Я думаю, вам нужно заменить

DisplayDateStart 

с

DisplayDate 

Потому что DisplayDateStart: (из MSDN)

Получает или задает первую дату, которая будет отображаться.

не дата, чтобы показать.

17

Если у вас нет имущества в вашем DataContext под названием Now, ваш Bindings потерпит неудачу. Вместо этого, вы должны использовать синтаксис {x:Static} так:

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

Поскольку DateTime не в стандартном XAML пространстве имен, вам нужно добавить объявление Xmlns к корневому элементу:

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

здесь на нагрузке он отображает 1/1/0001..it не показывает текущую дату – GANI

+0

Это должно работать, но если это не так, вы можете попробовать сделать {Binding Source = {x: Static sys: DateTime.Now}, Mode = OneTime} –

+0

Мне нужно, чтобы он привязывался к моему классу. это новый объект в новой строке, так как это сработает? – Dani

0

На top of Abe Heidebrecht «Ответ» Я приводил пример. Я думаю, ответ Абе правильный. У меня была такая же проблема с новым объектом и классом связывания и решить проблему в том, как упоминалось ниже:

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

ура :)

Смежные вопросы