'WPF Binding in textblock does not work but in its tooltip does

I have a weird issue.

In my application (witten with C# .net framework 4.8 with Microsoft's MVVM toolkit) I have a ListView bound to a BindingList<VisualMachine>, everything works as expected.

Now I wanted to add to the Itemtemplate a DockPanel with data from another BindingList<PreviewParameter> (another property of the original VisualMachine object ).

This is when weirdness starts: In this new ItemTemplate I have a Grid that contains an Image, a TextBlock and a Tooltip. The TextBlock and the Tooltip are bound to the same object, but only the ToolTip actually show data!

I feel like it's some DataContext Issue, but I am not able to pin it... Can anybody give me some advice? Thanks!

The code:

 <ListView Name="MachinesListView" Margin="2" HorizontalContentAlignment="Stretch" BorderThickness="0" DockPanel.Dock="Top" ItemsSource="{Binding Path=Machines}" PreviewMouseRightButtonDown="ListView_PreviewMouseRightButtonDown" SelectedItem="{Binding Path=SelectedMachine}">
    <ListView.ItemTemplate>
        <DataTemplate>
            <!-- Other stuff -->
            <DockPanel>
                <!--#region PREVIEW PARAMETERS PANEL-->
                <WrapPanel HorizontalAlignment="Stretch" DockPanel.Dock="Bottom" Visibility="{Binding Path=PreviewParameters.Count, Converter={StaticResource CountToVisConverter}}">
                    <ListView ItemsSource="{Binding Path=PreviewParameters}">
                        <ListView.ItemTemplate>
                            <DataTemplate>
                                <Grid MinWidth="50">
                                    <Grid.ColumnDefinitions>
                                        <ColumnDefinition Width="25"/>
                                        <ColumnDefinition Width="Auto" MinWidth="25"/>
                                    </Grid.ColumnDefinitions>
                                    <Image Grid.Column="0" Source="{Binding Path=Icon, Converter={StaticResource ResourceKey=BmpToBmpImageConverter}}"/>
                                    <TextBlock Grid.Column="1" MaxWidth="100" DataContext="{Binding}">
                                        <TextBlock.Text>
                                            <!-- THIS DOES NOT APPEAR -->
                                            <MultiBinding StringFormat="{}{0} [{1}]}">
                                                <Binding Path="Parameter.VisualizedValue"/>
                                                <Binding Converter="{StaticResource ParamToEnumDescConverter}" Path="Parameter"/>
                                            </MultiBinding>
                                        </TextBlock.Text>
                                    </TextBlock>
                                    <Grid.ToolTip>
                                        <TextBlock MaxWidth="100" TextWrapping="Wrap">
                                            <TextBlock.Text>
                                                <!-- THIS DOES APPEAR -->
                                                <MultiBinding StringFormat="{}{0} [{1}] - {2} TEST:{3} {4}">
                                                    <Binding Path="Parameter.Reference"/>
                                                    <Binding Path="Parameter.SetupIndex"/>
                                                    <Binding Path="Description"/>
                                                    <Binding Path="Parameter.VisualizedValue"/>
                                                    <Binding Converter="{StaticResource ParamToEnumDescConverter}" Path="Parameter"/>
                                                </MultiBinding>
                                            </TextBlock.Text>
                                        </TextBlock>
                                    </Grid.ToolTip>
                                </Grid>
                            </DataTemplate>
                        </ListView.ItemTemplate>
                    </ListView>
                </WrapPanel>
                <!-- Other stuff -->
            </DockPanel>
        </DataTemplate>
    </ListView.ItemTemplate>
</ListView>

What happens:

Binding weirdness



Solution 1:[1]

I found it. There was a } in the StringFormat property of the TextBlock's MultiBinding.

So instead of

<MultiBinding StringFormat="{}{0} [{1}]}">

it should be

<MultiBinding StringFormat="{}{0} [{1}]">

And BAM! Now it works.

I'll leave the question as the following reminder to anybody: "Write your code, review it, than go take a coffee o chat a little and then come back. You'll be amazed on how blind you could be."

Sources

This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.

Source: Stack Overflow

Solution Source
Solution 1 Marcomattia Mocellin