Наличие жестко закодированного текста с привязкой в ​​TextBlock - PullRequest
48 голосов
/ 25 апреля 2009

В WPF есть ли способ иметь свойство Text для TextBlock, содержащее как жестко закодированный текст, так и конкретную привязку?

Я имею в виду что-то вроде следующего ( конечно, ниже не компилируется) :

<TextBlock Text="Number of Fans: {Binding Artist.Fans.Count}"></TextBlock>

Ответы [ 5 ]

84 голосов
/ 25 апреля 2009

Есть, если вы на .Net 3.5 SP1

<TextBlock Text="{Binding Path=Artist.Fans.Count, 
                 StringFormat='Number of Fans: {0}'}" />
33 голосов
/ 13 декабря 2012

При использовании вышеуказанного подхода:

<TextBlock Text="{Binding Path="Artist.Fans.Count", 
                  StringFormat='Number of Fans: {0}'}" />

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

Вместо этого я пошел с этим подходом, который работал лучше для меня:

<TextBlock TextWrapping="Wrap">
    <Run>The value</Run>
    <Run Text="{Binding Path=MyProperty1, Mode=OneWay}" FontWeight="Bold" />
    <Run>was invalid. Please enter it with the format... </Run>
    <LineBreak/><LineBreak/>
    <Run>Here is another value in the program</Run>
    <Run Text="{Binding Path=MyProperty2, Mode=OneWay}" FontWeight="Bold" />
</TextBlock>                    
4 голосов
/ 25 апреля 2009

Использование Binding.StringFormat:

<TextBlock Text="{Binding Artist.Fans.Count, StringFormat='Number of Fans: {0}'}"/>
2 голосов
/ 28 октября 2015

Здесь значение привязки (clouds.all) добавляется с помощью «%». Вы можете добавить любое значение после "\ {0 \}".

 <TextBlock Text="{Binding Path=clouds.all, StringFormat=\{0\}%}"/>
0 голосов
/ 19 декабря 2018

С XAML с использованием шаблона 10 и MVVM:

Просто чтобы прояснить:

  • По определению, привязка связывает значения со свойствами элементов управления.
  • В соответствии с парадигмой MVVM, реализованной в структуре Template 10, значения инициализируются в ViewModel, связанной с соответствующей страницей XAML.

Вот как можно жестко закодировать текст вместе со связыванием в свойстве Text:

    <Page
        ...
        xmlns:vm="using:doubleirish.ViewModels"
        xmlns:sys="using:System"
        xmlns:controls="using:Template10.Controls"
        ...

        <Page.DataContext>
            <vm:StocksViewModel x:Name="ViewModel" />
        </Page.DataContext>

        ...

        <controls:PageHeader ... Text="{x:Bind sys:String.Format('Ticker : {0}', ViewModel.Ticker)}">

    ...

    </Page>
...