2010-03-15 18 views
15

¿Alguien puede sugerir la mejor manera de mostrar un Textblock (con un texto como "List Empty") para que su visibilidad esté vinculada a Items.Count.WPF Listbox - Empty List Display Message

He intentado el siguiente código y no puedo hacerlo funcionar, por lo que creo que debo estar haciendo mal.

<ListBox x:Name="lstItems" 
     ItemsSource="{Binding ListItems}"> 
    </ListBox> 
    <TextBlock Margin="4" FontStyle="Italic" FontSize="12" Text="List is empty" Visibility="Collapsed"> 
     <TextBlock.Style> 
      <Style TargetType="{x:Type TextBlock}"> 
       <Style.Triggers> 
        <DataTrigger Binding="{Binding ElementName=lstItems, Path=Items.Count}" Value="0"> 
         <Setter Property="Visibility" Value="Visible" /> 
        </DataTrigger> 
       </Style.Triggers> 
      </Style>        
     </TextBlock.Style> 
    </TextBlock> 

Respuesta

26

El problema en su código es que la fijación del valor de la visibilidad en el bloque de texto en sí tiene mayor prioridad que colocarlo en el estilo. Entonces, incluso cuando se produce el disparo, la configuración dentro del disparador no tiene efecto. Cambiar el XAML a:

<TextBlock Margin="4" FontStyle="Italic" FontSize="12" Text="List is empty" > 
    <TextBlock.Style> 
     <Style TargetType="{x:Type TextBlock}"> 
      <Setter Property="Visibility" Value="Collapsed" /> 
      <Style.Triggers> 
       <DataTrigger Binding="{Binding ElementName=lstItems, Path=Items.Count}" Value="0"> 
        <Setter Property="Visibility" Value="Visible" /> 
       </DataTrigger> 
      </Style.Triggers> 
     </Style>        
    </TextBlock.Style> 
    </TextBlock> 

Cuando la configuración de visibilidad es todo en el estilo y funciona (al menos en mi proyecto de demostración).

+0

Gracias, esto resolvió mi problema (y mi comprensión :)) exactamente –

+1

@DavidWard: http://msdn.microsoft.com/en-us/library/ms743230.aspx – Will