StringFormat объекта Datetime в привязке возвращает 0 для часа и минуты

Я создаю объект Datetime с Datetime.Now, и у меня есть это как свойство класса.

Когда я привязываю это к представлению сетки:

<GridViewColumn Header="Date" Width="120" DisplayMemberBinding="{Binding transaction_date1, StringFormat=HH:mm}" />

Результат всегда 00:00.

Когда я отлаживаю код, я вижу, что свойства часа, минуты и т. д. объекта Datetime содержат ненулевые значения. Я думаю, что StringFormat в этом случае получает час и минуту из объекта Date в объекте Datetime, который имеет правильные даты, но всегда имеет 00:00:00 в качестве часа.

Есть ли способ обойти это и отобразить правильный час и минуту в моем окне?

Заранее спасибо!


person spagi    schedule 30.10.2015    source источник


Ответы (1)


Измените его на это:

<GridViewColumn Header="Date" Width="120" DisplayMemberBinding="{Binding transaction_date1, StringFormat='{}{0:HH:mm}'}" />

Если вы хотите использовать StringFormat с пользовательским форматированием, вам нужно использовать этот метод, когда вы указываете индекс параметра в строке формата. Это эквивалентно:

string.Format("{0:HH:mm}", transaction_date1);

Две фигурные скобки в начале {} — это указание синтаксическому анализатору XAML игнорировать последующие фигурные скобки, найденные в строке. Таким образом, вы можете использовать значение даты несколько раз в одном операторе привязки:

DisplayMemberBinding="{Binding transaction_date1, StringFormat=`{} Your date-time is {0:dd/mm/yy} at approx. {0:HH} hours and {0:mm} minutes`}"
person Laith    schedule 30.10.2015
comment
Спасибо за разъяснение. Я также обнаружил, что значения времени теряются до достижения привязки. Но ваш ответ помог мне решить следующую проблему, которая у меня возникла бы :) - person spagi; 01.11.2015