Причина, по которой это не работает, состоит в том, что свойство Label.Content
имеет тип Object
, а Binding.StringFormat
используется только при привязке к свойству типа String
.
Происходит следующее:
-
Binding
упаковывает ваше значение MaxLevelOfInvestment
и сохраняет его в свойстве Label.Content
как десятичное значение в штучной упаковке. - Элемент управления Label имеет шаблон, который включает
ContentPresenter
. - Поскольку
ContentTemplate
не задано, ContentPresenter
ищет DataTemplate
, определенный для типа Decimal
.Когда он не находит ничего, он использует шаблон по умолчанию. - Шаблон по умолчанию, используемый
ContentPresenter
, представляет строки с использованием свойства ContentStringFormat
метки.
Возможны два решения:
- Использовать Label.ContentStringFormat вместо Binding.StringFormat или
- Использовать свойство String, например TextBlock.Text вместо Label.Content
Вот как использовать Label.ContentStringFormat:
<Label Content="{Binding Path=MaxLevelofInvestment}" ContentStringFormat="Amount is {0}" />
Вот как использовать TextBlock:
<TextBlock Text="{Binding Path=MaxLevelofInvestment, StringFormat='Amount is {0}'}" />
Примечание. Для простоты в приведенном выше объяснении я пропустил одну деталь: ContentPresenter
фактически использует свои собственные свойства Template
и StringFormat
, но во время загрузки они автоматически привязываются к шаблону к ContentTemplate
и ContentStringFormat
свойствам Label
, поэтому кажется, что ContentPresenter
фактически используя свойства Label
.