El truco que estoy hablando por encima no se recomienda. Sin embargo, si REALMENTE desea que aparezcan grupos vacíos, entonces simplemente delegaría el código de adición a un método de utilidad separado que verifica si el grupo está vacío. Si es así, lo agrega al grupo "predeterminado" (por lo que aparece al menos) hasta que agrega un elemento.
public static void AddGroup(this ListView lv, ListViewGroup lg)
{
if (lg.Items.Count > 0 || lv.Items.Cast<ListViewItem>().Any(tg => tg.Group == lg))
lv.Groups.Add(lg);
else
{
var item = lv.Items.Add(lg.Header);
item.Tag = lg;
}
}
public static void AddItem(this ListView lv, ListViewItem li, string groupKey) // Could also take ListViewGroup here...
{
if (lv.Groups[groupKey] == null && lv.Items.ContainsKey(groupKey))
{
lv.Groups.Add((ListViewGroup)lv.Items[groupKey].Tag);
lv.Items.RemoveByKey(groupKey);
}
lv.Items.Add(li);
li.Group = lv.Groups[groupKey];
}
public static void AddItem(this ListView lv, ListViewItem li, ListViewGroup lg)
{
lv.AddItem(li, lg.Header);
}
Otra advertencia, NO SE RECOMIENDA. Esto es bastante elevado, y realmente no vale la pena (IMO). Pero bueno, a cada uno lo suyo. Este código no se ha probado completamente, y simplemente lo arroja allí en caso de que realmente NECESITE que esto funcione (lo que nunca debería ser el caso, mejor buscar alternativas). La peor parte es que la declaración del Grupo simplemente reside en el ListItem mismo, de esa manera puede simplemente cambiar el grupo con bastante facilidad.
Última advertencia, no se recomienda.
Edición: He modificado el código anterior para ser métodos de extensión en los objetos ListView, de esa manera se tiene acceso directo a la ListView de los métodos. Cada vez que se agrega un grupo, usted acaba de llamar listView.AddGroup
, añadiendo un elemento que puede utilizar los métodos de listView.AddItem
. Esto se opone a los métodos listView.Items.Add
y listView.Groups.Add
. Lo único a tener en cuenta es que no necesita asignar elementos a los grupos, sino que solo asigna los grupos a los elementos. Esto hace que pueda cambiar elementos entre grupos cambiando la referencia, en lugar de tener que eliminar/agregar referencias entre grupos. Esto también asume que ha declarado que el Header
del ListItemGroup es el mismo que el Key
(en otras palabras, new ListItemGroup("HeaderText" /*KEY*/, "HeaderText" /*HEADER*/)
. De lo contrario, solo tiene que cambiar la lógica dentro de AddItem
para hacer referencia al valor correcto (que es Name
, por lo general)
Por lo Lo sé, los grupos vacíos simplemente no se muestran. Puede agregar un elemento de cadena en blanco solo para mostrar el grupo. – nik
Creo que recibiste tu respuesta –
Correcto. Los grupos vacíos no aparecen. Primero debe agregar elementos a ellos. –