6

2つの異なるViewModelのDisplayNameを組み合わせたいのですが、最初のモデルがNullObjectと等しくない場合に限ります。

コンバーターまたは親ビューモデルのいずれかでこれを簡単に行うことができますが、

これは何も表示しません:

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

なんで?

4

1 に答える 1

9

私はそれを2つに分割TextBlocksし、トリガーを使用して可視性を変更するだけです。を使用してトリガーInlinesのを変更しようとすると、おそらく優先順位の問題が発生し、をに抽出できません。TextInlinesSetter

例えば

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

代わりに:のMultiBinding代わりになります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>
于 2012-06-25T21:22:03.010 に答える