2014-10-16 3 views
1

Как связать (TwoWay) DateTime с TextBox таким образом, чтобы отображался только Year of DateTime, и TextBox также принимает ввод в качестве Года (т. Е. Пользователь может ввести «2014», и это успешно свяжется с DateTime)?TwoWay привязка DateTime к TextBox - только год

У меня есть следующие:

TextBox Margin="10, 1" MinWidth="100" Text="{Binding LastGoodDate, StringFormat={}{0:yyyy}}" > 

успешно показывает DateTime в формате гггг, однако привязка не выполняется, когда пользователь набирает «2014».

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

Любые идеи?

ответ

3

Это, вероятно, проще всего сделать в модели вида, добавив отдельный объект «Год». Например:

TextBox Text="{Binding LastGoodYear}" > 

Свойство не должно иметь свое собственное поле подложки, но должна изменить дату по мере необходимости:

public int LastGoodYear 
{ 
    get 
    { 
     return LastGoodDate.Year; 
    } 
    set 
    { 
     LastGoodDate = new DateTime(value, LastGoodDate.Month, LastGoodDate.Day); 
    } 
} 

Кроме того, убедитесь, чтобы вызвать «PropertyChanged» (LastGoodYear) в «LastGoodDate» сеттер.

+0

Спасибо, это то, чего я надеялся избежать (свойство backing, представляющее год), но я буду отмечать его как ответ, потому что я закончил с чем-то вроде этого. –

+0

@ D.Reagan Я предполагаю, что вы могли бы избежать свойства backing, используя MultiBinding с конвертером, но дополнительное свойство кажется более простым. – McGarnagle

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