Причина, по якій це не працює, полягає в тому, що 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властивості «s .