2016-03-07 67 views
0

我需要根據更改某些過濾器來更改代碼中列表框中所有項目的可見性。我試圖循環使用的項目將本地數組的值綁定到所有列表框項目的特定屬性(可見性)

myListbox.ContainerFromIndex(i) 

但只有前幾個沒有返回null。爲什麼我很快就發現這裏的答案:

Why ItemContainerGenerator.ContainerFromIndex() returns null and how to avoid this behavior?

關閉虛擬化並不像尊敬的解決方案給我,我也覺得不舒服關於滾動每一個項目叫ContainerFromIndex前查看,即使可能可以工作。

我從其他主題處理綁定和依賴屬性等方面都不是很聰明,也許也是因爲它們大多數是用xaml編寫的,而不是代碼。但我很確定答案應該在那裏。我對c#很陌生,對於這樣一個基本問題我沒有找到明確的解決方案。

我會準備這樣的陣列典型能見度

Visibility[] visibilities=new Visibility[100] 
    ... 

的,我想用100個項目myListBox使用這些值。無論是自動使用一些c#魔法還是像我以前在Win32中做的那樣循環。

+0

所以,你想'過濾'列表框中的集合中的一些值?如果是這樣,爲什麼不過濾收集並重新綁定到列表框? – Depechie

+0

我想根據本地數組中的值更改(可見性)屬性的所有listboxitems的代碼。我目前沒有綁定列表框項目的可見性屬性,所有項目都可見。我不知道如何訪問(集合?)的單個項目,因爲ContainerFromIndex工作不正常。 – hoacin

回答

0

基於Depechie的評論,我做了一個針對集合的研究並創建了一個功能代碼。下面是我做的:

,而不是由

lbGames.Items.Add(...) 

直接將項目添加到列表框我創建了兩個類別:

gameList.Add(...); or filteredGameList.Add(...) 

雖然:

List<object> gameList=new List<object>(); 
    ObservableCollection<object> filteredGameList = new ObservableCollection<object>(); 

添加項目這樣gameList包含所有項目(堆疊面板),filteredGameList僅包含我想要看到的項目。使用其可見性屬性只使用一個大集合有一些問題,可能是我的錯誤,也許不是。

Withouth ObservableCollection我無法重繪列表框,這是另一個列表存在過濾數據的問題。當我過濾數據時,我首先清除filteredGameList,然後添加我想要看到的所有項目,永遠不會更改Visibility屬性。 ObservableCollection始終會在項目更改時通知列表框。

在應用程序init上,我將列表框附加到此filteredGamesList。

lbGames.ItemsSource = filteredGameList; 

現在一切正常。

相關問題