L'hack di cui sto parlando in alto NON E 'RACCOMANDATO. Tuttavia, se VERAMENTE desideri visualizzare i gruppi vuoti, devi semplicemente delegare il codice di aggiunta a un metodo di utilità separato che controlla se il gruppo è vuoto. Se lo è, quindi lo aggiunge al gruppo "predefinito" (quindi almeno si presenta) finché non si aggiunge 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);
}
Un altro avviso, NON RACCOMANDATO. Questo è un bel po 'di overhead, e non ne vale la pena (IMO). Ma hey, a ciascuno il proprio. Questo codice è completamente non testato, e basta buttarlo là fuori nel caso in cui hai davvero bisogno di questo per funzionare (che non dovrebbe mai essere il caso, meglio cercare alternative). La parte peggiore è che la dichiarazione di gruppo si trova praticamente all'interno di ListItem stesso, in questo modo è possibile modificare il gruppo piuttosto facilmente.
Ultimo avvertimento, NON RACCOMANDATO.
Modifica: ho modificato il codice sopra per essere metodi di estensione su oggetti ListView, in questo modo si ha accesso diretto a ListView dai metodi. Ogni volta che aggiungi un gruppo, devi semplicemente chiamare listView.AddGroup
, aggiungendo un elemento che puoi utilizzare dei metodi listView.AddItem
. Questo è contrario ai metodi listView.Items.Add
e listView.Groups.Add
. L'unica cosa da tenere a mente è che non è necessario assegnare elementi ai gruppi, ma solo assegnare i gruppi agli elementi. In questo modo è possibile passare da un gruppo all'altro modificando il riferimento, invece di dover rimuovere/aggiungere riferimenti tra gruppi. Ciò presuppone anche che tu abbia dichiarato che lo(in altre parole, new ListItemGroup("HeaderText" /*KEY*/, "HeaderText" /*HEADER*/)
) è lodi ListItemGroup (in altre parole, devi semplicemente modificare la logica entro AddItem
per fare riferimento al valore corretto (che è Name
, di solito)
Per quanto riguarda lo so, i gruppi vuoti semplicemente non vengono visualizzati. È possibile aggiungere una stringa vuota solo per visualizzare il gruppo. – nik
Penso che tu abbia ottenuto la risposta –
corretta. I gruppi vuoti non vengono visualizzati. Devi prima aggiungere elementi a loro. –