Andreas Grech
Andreas Grech

Reputation: 107950

Having hardcoded text with a binding in a TextBlock

In WPF, is there any way to have the Text property of a TextBlock to contain both hard coded text and a specific binding?

What I have in mind is something along the lines of the following (ofcourse, the below doesn't compile):

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

Upvotes: 71

Views: 50069

Answers (6)

Caroline Souza
Caroline Souza

Reputation: 11

The solution that worked for me:

<Label Content="{Binding Artist.Fans.Count}" ContentStringFormat="Number of {0}"/>

Upvotes: 0

doogie
doogie

Reputation: 601

In using the above approach:

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

I found it somewhat restrictive in that I couldn't find a way to bold face inside the StringFormat nor could I use an apostrophe in the StringFormat.

Instead I went with this approach, which worked better for me:

<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>                    

Upvotes: 46

Varus Septimus
Varus Septimus

Reputation: 1650

With XAML using Template 10 and MVVM:

Just to be clear:

  • By definition, binding binds values to properties of controls.
  • Under the MVVM paradigm as implemented in the 'Template 10' framework, the values are initialized in the ViewModel associated to the relevant XAML page.

Here is how to have hardcoded text together with a binding in a Text property:

    <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>

Upvotes: 1

reza.cse08
reza.cse08

Reputation: 6178

Here the binding value(clouds.all) is added with "%". You can add any value you want after "\{0\}".

 <TextBlock Text="{Binding Path=clouds.all, StringFormat=\{0\}%}"/>

Upvotes: 6

Scott Weinstein
Scott Weinstein

Reputation: 19117

There is, if you are on .Net 3.5 SP1

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

Upvotes: 128

Danko Durbić
Danko Durbić

Reputation: 7237

Use Binding.StringFormat:

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

Upvotes: 6

Related Questions