2015-01-28 2 views
1

У меня есть TextBlockWPF DataTrigger для TextBlock управления Текст

<TextBlock>     
    <Run Text="{Binding Path=Value1}" /> 
    <Run Text="-" /> 
    <Run Text="{Binding Path=Value2}" /> 
</TextBlock> 

Мне нужно добавить такой триггер: Если Value2 = XXX, TextBlock следует отображать только Value1. Можно ли обойтись без конвертеров и модификаций ViewModel?

+2

почему бы не делать этого контроля в вашей собственности ViewModel? –

ответ

5

Предполагая, что вы не форматировать каждый Run по отдельности (т.е. FontSize, Foreground) вместо этого вы можете использовать MultiBinding с StringFormat и изменить Text связывания при Value2=XXX

<TextBlock> 
    <TextBlock.Style> 
     <Style TargetType="{x:Type TextBlock}"> 
      <Setter Property="Text"> 
       <Setter.Value> 
        <MultiBinding StringFormat="{}{0} - {1}"> 
         <Binding Path="Value1"/> 
         <Binding Path="Value2"/> 
        </MultiBinding> 
       </Setter.Value> 
      </Setter> 
      <Style.Triggers> 
       <DataTrigger Binding="{Binding Value2}" Value="XXX"> 
        <Setter Property="Text" Value="{Binding Value1}"/> 
       </DataTrigger> 
      </Style.Triggers> 
     </Style> 
    </TextBlock.Style> 
</TextBlock> 
+0

это элегантно! –

0
<TextBlock>     
     <Run Text="{Binding Path=prop1}" /> 
     <Run Text="-" /> 
     <TextBlock> 
      <TextBlock.Style> 
       <Style> 
        <Style.Triggers> 
         <DataTrigger Binding="{Binding Path=prop2}" Value="XXX"> 
          <Setter Property="TextBlock.Visibility" Value="Collapsed"/> 
         </DataTrigger> 
        </Style.Triggers> 
       </Style> 
      </TextBlock.Style> 
      <Run Text="{Binding Path=prop2}" /> 
     </TextBlock> 
    </TextBlock> 

- единственный способ найти. Запуск не имеет свойства видимости.

Смежные вопросы