2009-06-19 18 views

Respuesta

10

Este XAML hará algo similar, tiene un ListView visible que muestra una lista y un mensaje oculto y cambia de visibilidad cuando la lista está vacía usando un disparador .

El siguiente código funcionará con cualquier IList o ICollection pero la misma técnica se puede utilizar con cualquier fuente de datos, como siempre, si desea que la pantalla se actualice al agregar o quitar elementos, debe usar un ObservableCollection o similar .

ContentPresenter está ahí porque solo puede usar desencadenantes dentro de una plantilla o un estilo, por lo que ponemos nuestros controles dentro de una plantilla de datos y usamos el ContentPresenter para mostrarlos.

Si desea que el mensaje aparezca dentro de ListView, todo lo que tiene que hacer es eliminar el Setter que oculta el ListView y agregar un margen al TextBlock para colocarlo donde debe estar el primer elemento en ListView.

<ContentPresenter Content="{Binding}"> 
    <ContentPresenter.ContentTemplate> 
     <DataTemplate> 
      <Grid> 
       <ListView Name="list" ItemsSource="{Binding MyList}"/> 
       <TextBlock Name="empty" Text="No items found" Visibility="Collapsed"/> 
      </Grid> 
      <DataTemplate.Triggers> 
       <DataTrigger Binding="{Binding MyList.Count}" Value="0"> 
        <Setter TargetName="list" Property="Visibility" Value="Collapsed"/> 
        <Setter TargetName="empty" Property="Visibility" Value="Visible"/> 
       </DataTrigger>       
      </DataTemplate.Triggers> 
     </DataTemplate> 
    </ContentPresenter.ContentTemplate> 
</ContentPresenter> 
+0

Este ejemplo no funciona para ocultar el bloque de texto si no está vacío, porque el valor de visibilidad no es booleano. ¿Es posible cambiarlo a oculto? –

+0

@Surup, no entiendo su comentario, el TextBlock está oculto cuando la lista no está vacía, pero es posible que desee ver BooleanToVisibilityConverter – Nir

-1

¿Lo enlaza a una propiedad DataSource + que le devuelve el texto que desea? Ranura en un objeto ficticio cuya cadena es el texto que desea ...