2013-05-17 8 views
6

Witam Próbuję dać wartość domyślną do textblock jeżeli wyniki zwracane są nieważneDaj TextBlock Domyślna wartość, jeśli wynik zwraca null

Oto co próbuję!

Wszystko, co zwraca to ustawiony przeze mnie format ciągu!

<TextBlock x:Name="NameTxtBlock" Grid.Column="0" Margin="0,0,40,0" FontFamily="Segoe UI" FontSize="14" Text="{Binding Name, StringFormat='Item Name: {0}'}" Padding="2"> 
    <TextBlock.Style> 
     <Style TargetType="TextBlock" >            
      <Style.Triggers> 
       <DataTrigger Binding="{Binding ElementName=NameTxtBlock, Path=Text}" Value="{x:Null}"> 
        <Setter Property="FontStyle" Value="Italic"/> 
        <Setter Property="Text" Value="No Name Found" /> 
       </DataTrigger> 
       <DataTrigger Binding="{Binding ElementName=NameTxtBlock, Path=Text}" Value="{x:Static System:String.Empty}"> 
        <Setter Property="FontStyle" Value="Italic"/> 
        <Setter Property="Text" Value="No Name Found" /> 
       </DataTrigger> 
      </Style.Triggers> 
     </Style> 
    </TextBlock.Style> 
</TextBlock> 

Odpowiedz

18

Można użyć TargetNullValue Property. To zwróci TargetNullValue bez StringFormat, jeśli powiązanie zwróci wartość Null.

<TextBlock Text="{Binding Name, StringFormat='Item Name: {0}', TargetNullValue='No Name Found'}" /> 
1

Powiązałbym obiekt TextBlock z właściwością obiektu, który nie zwrócił wartości NULL; spraw, aby twoja własność zwróciła wartość domyślną. Wydaje się, że zawsze chcesz, aby FontStyle był kursywą, więc po prostu zbudowałbym to poza wyzwalaczami.

3

Możesz użyć właściwości TargetNullValue bezpośrednio w powiązaniu.

<TextBox Text='{Binding Path=LastName, TargetNullValue="No name found."}' /> 
0

W moich aplikacjach uważam, że bardziej niezawodne jest wiązanie moich wyzwalaczy z rzeczywistym obiektem, do którego moja kontrola jest związana. Tak więc, jeśli patrzę na Nazwa w VM w celu powiązania z faktycznym tekstem, również ustawiam mój wyzwalacz danych.

<TextBlock x:Name="NameTxtBlock" Grid.Column="0" Margin="0,0,40,0" FontFamily="Segoe UI" FontSize="14" Text="{Binding Name, StringFormat='Item Name: {0}'}" Padding="2"> 
<TextBlock.Style> 
    <Style TargetType="TextBlock" >            
     <Style.Triggers> 
      <DataTrigger Binding="{Binding Name}" Value="{x:Null}"> 
       <Setter Property="FontStyle" Value="Italic"/> 
       <Setter Property="Text" Value="No Name Found" /> 
      </DataTrigger> 
      <DataTrigger Binding="{Binding Name}" Value=""> 
       <Setter Property="FontStyle" Value="Italic"/> 
       <Setter Property="Text" Value="No Name Found" /> 
      </DataTrigger> 
     </Style.Triggers> 
    </Style> 
</TextBlock.Style> 

+1

Ponadto, można użyć względnej źródła TrialAndError

Powiązane problemy