看板 C_Sharp 關於我們 聯絡資訊
這我覺得有難度,剛有找出可能解法 改完結果,我測試按下button可以更新UI https://gist.github.com/name2name2/86bf81be8e291a1a0e951f1b84e65b44 https://i.imgur.com/OVAoMGY.gif
--修改過程及分析-- .. 推測不會更新原因: 通常UI不會更新,有可能集合沒有INotifyPropertyChanged功能, 或是集合的元素class裡面的屬性沒有使用INotifyPropertyChange, 所以我猜xaml裡Resource區的的CollectionViewSource 可能不具有PropChange類似功能 我對DynamicResource的概念沒有很清楚,但我有試試看在xaml裡面 在ListBox改用DynamicResource,不過好像也沒有效果 後來google staticresource property changed 找到這篇 https://goo.gl/GKV86H 裡面有一個解答是認為resource不會被observed, 所以她建議去binding 可以INotifyPropertyChanged的東西 .. 然後我看xaml後,對google查了些東西, 在查 ListCollectionView.Groups example 的時候, 查到這篇範例 https://goo.gl/aRuPBX 他裡面直接用 ICollectionView view = CollectionViewSource.GetDefaultView(myList); view.GroupDescriptions.Add(new PropertyGroupDescription("Country")); lbPersonList.ItemsSource = view; 去做到group的效果 我用相同概念改寫在xaml.cs裡完成 這邊最神奇的應該是 GetDefaultView 官方文件的概念解釋滿有趣的, https://goo.gl/GxmYwA WPF always binds to a view rather than a collection 然後很神奇的是,這樣寫之後, ListBox的ItemSource直接綁Employees竟然就有更新的效果, 而且還可以分group 推測可能GetDefaultView加下去後,對Employees有群組效果 特別是這裡private ICollectionView EmployeesSource完全沒有寫在xaml竟也有效。 更進一步剛剛試過, 直接把ICollectionView屬性標註: //private ICollectionView EmployeesSource //{ // get { return _employeesSource; } // set { _employeesSource = value; } //} //private ICollectionView _employeesSource; 然後window建構式裡面改寫成 ICollectionView Employee在建構式執行完應就會被銷毀的形式: ICollectionView EmployeesSource = CollectionViewSource.GetDefaultView(Employees) ; EmployeesSource.GroupDescriptions.Add(new PropertyGroupDescription("HireDate")); } 經測試竟然建構結束,UI出現後,也可以正常分Group, 有可能GetDefaultView可以直接對集合的default view做出影響, 並保留在整個程式生命週期 如有討論點或錯誤之處再請告知 : 各位好, : 我有資料需要分組, 所以我用了listbox 搭配CollectionViewSource的group去分類 : group heaer的layout有一個delete的image可以刪除整個group : 但是現在有需求是如果目前正在刪除中, : 這個delete image要把他disable 或是 隱藏起來 : 所以我在delete image的tag屬性讓它bing住group item本身, : 這樣我在delete image 按下時可以拿到group item的datacontext是CollectionViewGroup : 所以我想客製化CollectionViewGroup, 多加一個屬性進去CollectionViewGroup去控制 : delete image的visibility : 找到網路上有人做類似的客製化 : 但我目前遇到如果我動態增加一筆資料時, UI就不會更新, : 不知道是哪邊漏了實作, 希望有人幫我解答或是什麼關鍵字可以找到資料, 謝謝各位 : 程式碼 : https://pastebin.com/GEJ5yMWd -- ~ Sent from my PCMan Combo ~ -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 114.36.97.231 ※ 文章網址: https://www.ptt.cc/bbs/C_Sharp/M.1506020454.A.FA6.html ※ 編輯: name2name2 (114.36.97.231), 09/22/2017 03:23:31
JGC18: 謝謝name2name2大大的回應, 的確在code裡面加上群組也能達 09/22 15:43
JGC18: 到分組效果, 不過因為我想直接操控group header的layout 09/22 15:43
JGC18: 所以才想說要客製化CollectioViewGroup.只要把xaml裡面的 09/22 15:44
JGC18: CollectionViewType="local:EmployeeCollectionView"不要 09/22 15:45
JGC18: 指定到客製的類別, add分組一切正常.後來只好直接在code裡 09/22 15:46
JGC18: 只接找header裡面的image去更改他的visibility 09/22 15:47
感謝回覆,現在才發現我看到UI上Add按鈕後就只想著按下add後如何更新UI, 忽略前面大篇幅image header等的描述 剛也試過去掉CollectionViewType就可更新, 由此知我原推測resource沒PropChange不太正確 之後如有其他進展再放上來 ※ 編輯: name2name2 (114.42.217.224), 09/22/2017 20:37:56 ※ 編輯: name2name2 (114.42.78.167), 10/06/2017 23:06:16