текстовое поле заполняется, но средство выбора даты не использует привязку mvvm

У меня есть текстовое поле с датой, и я хочу преобразовать его в средство выбора даты для двусторонней привязки. Но, к сожалению, средство выбора даты не показывает дату.

                    <TextBox Grid.Row="1"
                         Grid.Column="4"
                         IsReadOnly="False"
                         Text="{Binding Path=BirthDate,
                                        Mode=OneWay,
                                        StringFormat='dd/MM/yyyy'}" />

Следующий код не работает, выбранная дата показывает пусто... (пока в ней есть значение)

                <DatePicker Grid.Row="1"
                           Grid.Column="4" FirstDayOfWeek="Monday" SelectedDate="{Binding BirthDate, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}" ></DatePicker>

В другом месте приложения у меня также есть средство выбора даты, которое работает:

            <DatePicker x:Name="DatePicker" 
                    Grid.Row="3"
                    Grid.Column="1"
                    FirstDayOfWeek="Monday"
                    SelectedDate="{Binding Parameter.PAR_Date,
                                           Mode=TwoWay}"  />

Я не вижу, что я делаю неправильно, это кажется очень простым.

Я могу просто ввести дату в средстве выбора даты, и это работает... очень странно... буду рад любым идеям...

РЕДАКТИРОВАТЬ:

Подошел на шаг ближе, используя snoop и просмотрев привязку к средству выбора даты, и, похоже, произошла ошибка, у меня, кажется, другой ожидаемый тип:

System.Windows.Data Error: 1 : Cannot create default converter to perform 'two-way' conversions between types 'EVD.Framework.NullableDateTime' and 'System.Nullable`1[System.DateTime]'. Consider using Converter property of Binding. BindingExpression:Path=Birthdate; DataItem='SomeModel' (HashCode=31671132); target element is 'DatePicker' (Name=''); target property is 'SelectedDate' (type 'Nullable`1')
System.Windows.Data Error: 5 : Value produced by BindingExpression is not valid for target property.; Value='04/10/1929' BindingExpression:Path=Birthdate; DataItem='SomeModel' (HashCode=31671132); target element is 'DatePicker' (Name=''); target property is 'SelectedDate' (type 'Nullable`1')

РЕДАКТИРОВАТЬ 2:

Вот и все, в коде datetime был NullableDateTime. Спасибо всем, кто предлагает идеи, особенно Вив. Голосуйте за всех, у кого есть достойное предложение :-)


person user1841243    schedule 24.03.2014    source источник
comment
Можете ли вы показать больше кода? Например, где и как вы устанавливаете значение для BirthDate?   -  person Anatoliy Nikolaev    schedule 24.03.2014
comment
отлично работает для меня. Вы уверены, что DatePicker.DataContext прав и действительно может найти собственность? Вы можете проверить это с помощью Snoop во время выполнения, чтобы убедиться, что DataContext правильный и SelectedDate Binding действителен на DatePicker.   -  person Viv    schedule 24.03.2014
comment
Вы проверили наличие ошибок привязки в ближайшем окне?   -  person kenjara    schedule 24.03.2014
comment
Привет, Вив, я стал на шаг ближе к проблеме с помощью Snoop. Спасибо за этот совет. Смотрите мои правки.   -  person user1841243    schedule 25.03.2014


Ответы (1)


В этой статье хорошо объясняется StringFormat: http://elegantcode.com/2009/04/07/wpf-stringformat-in-xaml-with-the-stringformat-attribute/

Не забывайте использовать {0} при форматировании.

person Xcalibur37    schedule 25.03.2014