Установите дату по умолчанию для средства выбора даты WPF на текущую дату - PullRequest
10 голосов
/ 08 сентября 2010

У меня есть таблица данных WPF, в которой один из столбцов является столбцом даты.

Итак, я использовал 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?

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

Ответы [ 3 ]

18 голосов
/ 08 сентября 2010

Если у вас в 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 голос
/ 08 сентября 2010

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

DisplayDateStart

с

DisplayDate

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

Получает или задает первую отображаемую дату.

не дата для отображения.

0 голосов
/ 21 июля 2015

поверх ответа Abe Heidebrecht Я привожу пример.Я думаю, что ответ Эйба правильный.У меня возникла та же проблема с привязкой нового объекта и класса, и я решил проблему следующим образом:

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

cheers:)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...