2014-01-28 4 views
2

У меня есть выпадающий WPFвыпадающего связывание и StringFormat

<ComboBox SelectedValue="{Binding ElementName=Ctrl, Path=Day, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged, StringFormat='00'}" 
ItemsSource="{Binding ElementName=Ctrl, Path=AvailableDays, Mode=OneWay, StringFormat='00'}" 
IsEditable="True" Grid.Column="0" /> 

который является DataBound этих свойств

public int? Day { 
    get { return _day; } 
    set { 
     if (_day != value) { 
      _day = value; 
      OnPropertyChanged(); 
     } 
    } 
} 

public IEnumerable<int> AvailableDays { 
    get { return _availableDays ?? (_availableDays = Enumerable.Range(1, 31)); } 
} 

переплетных работ. Но моя проблема - Формирование ценностей. Я хочу, чтобы дни < 10 формировались с начальным нулем. Но мой «StringFormat = '00» полностью игнорируется, что нечетно, потому что тот же формат работает с текстовым блоком без проблем.

+3

Вы пытались установить 'ItemStringFormat =" 00 "' на 'ComboBox'? – SuperOli

+1

Я где-то читал, что он должен работать только в том случае, если 'IsEditable =" False "' на вашем 'ComboBox'. Поэтому в вашем случае это не должно работать. Но все равно попробуй. – SuperOli

+1

Посмотрите на это: http://stackoverflow.com/questions/9533986/stringformat-on-combobox-displaymemberpath – SuperOli

ответ

3

Binding.StringFormat работает только в том случае, если целевой тип имущества string. Вот почему он работает с string TextBlock.Text, но не работает с object ComboBox.SelectedValue. Как правило, если вы хотите отформатировать результат привязки, вы можете создать собственный класс StringFormatConverter : IValueConverter с тривиальной реализацией и использовать его в Binding.Converter.

В вашем случае вместо этого вы должны использовать ComboBox.ItemStringFormat.

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