.net wpf listbox datatemplate

.net - WPF listbox empty datatemplate



datatemplate wpf c# (2)

Me preguntaba cómo las personas manejan un control ListBox que no tiene elementos. por ejemplo, quiero vincular una lista de resultados de búsqueda, pero si no se encuentran resultados me gustaría mostrar "No se encontraron resultados".

La forma en que actualmente abordo esto es que oculto el cuadro de lista si el conjunto de resultados cuenta = 0 y muestra una etiqueta con el mensaje "No se encontraron resultados". Idealmente, me gustaría algo como la solución EmptyTemplate de ASP .NET datagrid.

Aclamaciones


Basándome en la respuesta aceptada de @Matt Hamilton, para referencia, creé una variación que no requiere el enlace, ya que usa la propiedad HasItems de ListBox para activar la plantilla vacía:

<ListBox.Style> <Style x:Key="EmptyListStyle" TargetType="ListBox" BasedOn="{StaticResource {x:Type ListBox}}"> <Style.Triggers> <!-- Use ListBox.HasItems instead of Binding --> <Trigger Property="HasItems" Value="False"> <Setter Property="Template"> <Setter.Value> <ControlTemplate> <TextBlock>No items to display</TextBlock> </ControlTemplate> </Setter.Value> </Setter> </Trigger> </Style.Triggers> </Style> </ListBox.Style>

Esto permite que el estilo se use globalmente, sin tener que saber el nombre de la propiedad a la que se enlaza la lista. Lo encontré útil al enlazar con un CollectionViewSource definido en XAML.

No tengo conocimiento de ningún inconveniente de este método, los comentarios son bienvenidos si encuentra alguno.


He tenido cierto éxito con este código:

<Style TargetType="ListBox" x:Key="ListStyle" BasedOn="{StaticResource {x:Type ListBox}}"> <Style.Triggers> <DataTrigger Binding="{Binding RelativeSource={x:Static RelativeSource.Self}, Path=Items.Count}" Value="0" > <Setter Property="Template"> <Setter.Value> <ControlTemplate> <TextBlock>No items to display</TextBlock> </ControlTemplate> </Setter.Value> </Setter> </DataTrigger> </Style.Triggers> </Style>