Проблема выбора даты в WPF - PullRequest
2 голосов
/ 17 января 2011

Xaml-код

    <DatePicker Grid.Column="0" Grid.Row="1" HorizontalAlignment="Left" Margin="100,50,0,10" Name="dateText" VerticalAlignment="Top" Width="120" >
      <DatePicker.SelectedDate>
        <Binding Source="{StaticResource insertTransaction}" Path="Date" />
      </DatePicker.SelectedDate>
    </DatePicker>

код для свойства даты в вышеуказанном классе (insertTransaction)

private DateTime? date;
    public DateTime? Date 
    {
      get { return this.date; }
      set { this.date = value; }
    }

Как можно получить только часть даты, а не всю дату ивремя.Обнуляемая дата обязательна, потому что пользователь может не знать дату в первый раз и может ввести ее позже.DateTime.ToShortDateTime () не работает на DateTime?

Ответы [ 4 ]

4 голосов
/ 17 января 2011

Не уверен, если вы ищете это: DateTime имеет свойство DateTime.Date . Это только возвращает DatePart. Тем не менее, вы должны проверить на нулевые значения до.

Обновление

Исходя из вашего комментария, я думаю, что вы ищете некоторую информацию об обнуляемых типах. Посмотрите эту msdn-статью для получения дополнительной информации о обнуляемых типах в .net.

DateTime? это DateTime, который можно обнулять. Из-за этого вы получите нулевое исключение, если попытаетесь получить значения из его свойств, если оно пустое. Поэтому сначала вы должны проверить, является ли он пустым, и получить доступ к свойствам или методам, таким как ToShortDateString ().

Нет собственного типа .net специально только для дат . Все даты обрабатываются в структуре DateTime и имеют компонент времени. Вы можете создать свой собственный тип или обработать строки (например, DateTime.GetShortDateString возвращает строку). Другой способ справиться с этим, а также с нулевыми значениями обнуляемых типов - это использовать ValueConverter. Смотрите здесь . Они могут быть использованы в xaml и могут обрабатывать все, что вы хотите. Они очень мощные.

3 голосов
/ 17 января 2011

Измените свой код на:

public DateTime? Date {
    get { return this.date.Value.Date; }
    set { this.date = value; }
}

Вы также получите время, которым нужно пренебречь, и фиктивное (как-то в 12:00)

Если вы хотите точно указать дату без времени, вы должны принять ее как строку ToShortDateTime(); в get.

1 голос
/ 17 января 2011

Непонятно, где вы хотите получить часть даты в коде или в xaml. В любом случае в коде вы можете сделать это так:

if (Date.HasValue == true)
{
    return Date.Value.ToShortDateString();
}
0 голосов
/ 18 января 2011

Спасибо всем !! Я думаю, что я направлялся на юг, а не на север: -P .... Ну, теперь я собираюсь использовать Nullable DateTime? как это должно быть использовано. Вместо того, чтобы искать неправильное решение для извлечения даты, я собираюсь использовать StringFormat; всякий раз, когда мне требуется отобразить дату.

Полагаю, это оптимальное решение. Дайте мне знать, если вы, ребята, думаете о другом.

Еще раз спасибо

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