wpf - ejemplo - la colección de elementos debe estar vacía antes de usar itemssource
Cómo presentar una colección de objetos en un cuadro de lista en WPF (3)
Tengo una colección de objetos que quiero presentar. ¿Cómo puedo hacer esto? Un cuadro de lista haría, pero cada objeto tiene muchos atributos que quiero presentar. Ya até un listbox a una colección y tengo todos mis objetos en la lista. Mi pregunta es sobre la visualización del cuadro de lista y si el cuadro de lista es lo correcto o hay algo más que debería usar.
Encuentro que las respuestas existentes son un poco insuficientes, normalmente uno no procesa las colecciones ni reduce sus elementos a una cadena, en el mejor de los casos haría una manipulación dinámica usando un CollectionView
(por ejemplo, ordenando, agrupando), pero normalmente usa Plantilla de datos para mostrar los elementos individuales que le permite usar todas sus propiedades.
Además, hay varios controles que funcionan bien con las colecciones, en primer lugar, debe saber si desea la selección, si no es un ItemsControl
es una buena opción, de lo contrario debe utilizar un ListBox
o ListView
.
Las ListViews normalmente se emplean si tiene diferentes vistas para sus objetos, por ejemplo, una vista de detalles y una vista en miniatura. Puede usar ListView.View
para esto, hay una vista existente en el marco, GridView
, que ofrece columnas. Lo que Matthew Ferreira sugirió es exactamente lo que no se debe hacer con un ListView, ya que se quiere que las plantillas dependan de la vista actual; de hecho, ese código ni siquiera se compila, ya que DataTemplate
solo puede tener un elemento secundario.
Se supone que ListViews encapsulan la lógica de vista en su vista para que pueda modificarse a voluntad. Si decide usar un ItemsControl
o ListBox
entonces lo que desea hacer es configurar el ItemTemplate
. Lea la descripción general de los datos de los datos a la que me he vinculado, es un buen punto de partida.
Su colección de objetos probablemente se vea como su modelo. Lo habitual en WPF es agregar un ViewModel que traduzca y exponga los datos del modelo a un formato adecuado para el enlace. Dependiendo de lo que desee hacer, su VM podría, por ejemplo, formatear cada objeto en una representación de cadena y luego exponerlo como una colección de cadenas a la que se puede vincular y mostrar Listbox.
Es posible que desee considerar el uso de un control ListView en su lugar. ListView
tiene soporte para columnas si planea mostrar varias propiedades de su objeto. Puede usar la propiedad ItemTemplate
para formatear la visualización de su objeto. Por ejemplo:
<ListView ItemsSource="{Binding Path=myObjectCollection}">
<ListView.ItemTemplate>
<DataTemplate>
<TextBlock Text="{Binding Path=Title}"/>
<CheckBox IsChecked="{Binding Path=ShouldCheck}"/>
</DataTemplate>
</ListView.ItemTemplate>
</ListView>
Este ejemplo asume que su objeto tiene las propiedades Title
y ShouldCheck
.