我在上面討論的黑客是不推薦的。但是,如果您真的希望空組顯示出來,那麼您只需將添加的代碼委託給單獨的實用程序方法來檢查組是否爲空。如果是,則將其添加到「默認」組(至少它會顯示出來),直到您向其添加項目爲止。
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);
}
另一個警告,不推薦。這是相當多的開銷,並不是真的值得麻煩(海事組織)。但是,嘿,每個人都是。這段代碼完全沒有經過測試,只是把它扔到那裏以防萬一你真的需要這個工作(這永遠不會是這樣,更好地尋找替代品)。最糟糕的部分是Group聲明幾乎只存在於ListItem本身中,這樣你可以很容易地改變組。
最後警告,不推薦。
編輯:我修改了上面的代碼,作爲ListView對象的擴展方法,這樣您就可以直接從方法訪問ListView。無論何時添加一個組,您只需撥打listView.AddGroup
,添加一個可用於listView.AddItem
方法的項目。這與listView.Items.Add
和listView.Groups.Add
方法相反。要記住的一件事是,您不需要將項目分配給組,而是隻將組分配給項目。這使得您可以通過更改參考在組之間切換項目,而不必在組之間移除/添加參考。這還假定您已經聲明瞭ListItemGroup的Header
是相同Key
(換句話說,new ListItemGroup("HeaderText" /*KEY*/, "HeaderText" /*HEADER*/)
。否則,你只需要改變內AddItem
邏輯引用正確的值(這是Name
,通常情況下)。
至於我知道,空組只是不顯示。您可以添加一個空白字符串項目來顯示該組。 – nik 2012-03-05 04:11:11
我想你的回答是 – 2012-03-13 02:13:51
正確。空組不顯示。你必須先向他們添加項目。 – 2012-03-13 09:13:30