TextBlock style triggers
datatrigger, mvvm, styles, wpf, xaml
Solution
I would split it into two `TextBlocks` and only change the visibility using a trigger. By using the `Inlines` and trying to change the `Text` in the triggers you probably run into precedence problems and the `Inlines` cannot be extracted to a `Setter`.
e.g.
<StackPanel Grid.Column="2" Grid.Row="0" Orientation="Horizontal">
<TextBlock Text="{Binding HonorificVm.DisplayName}" Margin="0,0,5,0">
<TextBlock.Style>
<Style TargetType="TextBlock">
<Style.Triggers>
<DataTrigger Binding="{Binding HonorificVm.Honorific}"
Value="{x:Static model:Honorific.NullHonorific}">
<Setter Property="Visibility" Value="Collapsed" />
</DataTrigger>
</Style.Triggers>
</Style>
</TextBlock.Style>
</TextBlock>
<TextBlock Text="{Binding PersonNameVm.DisplayName}" />
</StackPanel>
An alternative would be a `MultiBinding` instead of `Inlines`:
<TextBlock Grid.Column="2" Grid.Row="0">
<TextBlock.Style>
<Style TargetType="{x:Type TextBlock}">
<Setter Property="Text">
<Setter.Value>
<MultiBinding StringFormat="{}{0} {1}">
<Binding Path="HonorificVm.DisplayName" />
<Binding Path="PersonNameVm.DisplayName" />
</MultiBinding>
</Setter.Value>
</Setter>
<Style.Triggers>
<DataTrigger Binding="{Binding HonorificVm.Honorific}"
Value="{x:Static model:Honorific.NullHonorific}">
<Setter Property="Text" Value="{Binding PersonNameVm.DisplayName}" />
</DataTrigger>
</Style.Triggers>
</Style>
</TextBlock.Style>
</TextBlock>
Problem
I would like to combine the DisplayNames from two different ViewModels, but only IF the first is not equal to a NullObject. I could easily do this in either a converter or a parent view model, but am This displays nothing at all: ``` <TextBlock Grid.Column="2" Grid.Row="0" > <TextBlock.Inlines> <Run Text="{Binding HonorificVm.DisplayName}"/> <Run Text="{Binding PersonNameVm.DisplayName}"/> </TextBlock.Inlines> <TextBlock.Style> <Style TargetType="{x:Type TextBlock}"> <Style.Triggers> <DataTrigger Binding="{Binding HonorificVm.Honorific}" Value="{x:Static model:Honorific.NullHonorific}"> <Setter Property="Text" Value="PersonNameVm.DisplayName"/> </DataTrigger> </Style.Triggers> </Style> </TextBlock.Style> </TextBlock> ``` Why?