我一直在試圖隱藏TreeView的項目。我使用自定義數據類型作爲從FrameworkElement繼承的源(稱爲SettingsMenuItem)(當前是FrameworkContentElement,因爲否則TreeView呈現錯誤)。隱藏TreeView項目
我的目標是通過這些FrameworkElements的VisibilityProperty
設置要麼Collapsed
或Visible
我能夠隱藏某些項目(包括子女)。我知道這可以通過從源集合中刪除項目來完成。但那不是我想要的。這意味着我必須對每個集合進行鏡像以便跟蹤它的實際項目,綁定到每個集合以便通知Visibility
-更改並在每次更改時創建一個新集合。這很多開銷。
現在我不知道如何才能做到這一點。我認爲它與ItemsGenerator有關,但我沒有看到覆蓋它的行爲的任何可能性。我認爲TreeView能夠檢測可見性,但顯然它沒有。作爲另一種選擇,我想到了一個自定義的TreeViewItem(如果需要的話,甚至可能是TreeView) - 但是在這一點上,整個系統的抽象使我感到壓力。我不知道從哪裏開始,以及解決問題的實際必要性。
提示我必須自己改變或實施將是綽綽有餘。一個完整的解決方案會很好。
需要查看一些代碼來提出修復建議。你有沒有用XAML編寫的HierarchicalDataTemplate可以包含在你的問題中? –
這並不像通常那樣做。通常使用ICollectionView&設置過濾器謂詞來完成過濾。使用TreeView時,這會稍微複雜 - 因爲您需要在每種數據類型中都有一個ICollectionView。您不應該需要從FrameworkElement繼承。除非您正在推出一些與現有TreeView截然不同的瘋狂自定義TreeView,並且您無法通過替換Templates來表示這種差異。但是,我幾乎可以保證,你不需要這樣做。 – user3690202
這就是我一直在尋找的。我已經這麼想過了。我沒有嚴格使用MVVM,但我知道使用TreeViews和其他數據視圖控件並沒有使用它(或至少它的某些事情)是沒有意義的。無論如何,我按照您建議的方式解決了它@ user3690202:我使用了一個CollectionView,它使用每個實例中指定的代理來過濾那些應該隱藏的代理。 – SharpShade