2012-05-01 67 views
1

我在寫一個控件來探索一個可以動態創建的樹結構。 這個控件看起來很像一個資源管理器窗口,「CurrentItem」是打開的文件夾,一些「ChildrenItems」是子文件夾或文件。ListBox是否保留每個ItemsSource的CollectionViewSource?

要顯示ChildrenItems,我使用了一個ListBox。當我點擊一個子項時,我將新的CurrentItem設置爲子項,並更新ChildrenItems(沿樹向下)。

所以從技術上講,我經常修改ListBox的ItemsSource屬性。

我也有像「上」,「返回」,「根」一些命令等

我有一些問題,與「上」命令,並注意到,當我改變將列表框的ItemsSource屬性重新設置爲ItemsSource設置,將ListBox的SelectedItem重置爲使用舊ItemsSource時選擇的舊項目。

也許有點爲例會比較明確的:比方說,我有這樣的樹形結構:

- Root 
    - Node 1 
    - SubNode 1a 
    - SubNode 1b 
    - Node 2 
    - Node 3 

我開始通過設置「CURRENTITEM」爲根探索這個結構。這意味着我的ListBox ItemsSource被設置爲「Node1,Node2,Node3」。

然後點擊「Node1」(它改變SelectedItem)。然後,我的控件將其「CurrentItem」設置爲此新的SelectedItem,並將ListBox ItemsSource設置爲「SubNode1a,SubNode1b」。然後,如果使用我的「Go Up」命令,將「CurrentItem」重置爲「Root」,並將ListBox ItemsSource改爲「Node1,Node2,Node3」,但存在差異:「Node1 「被選中。

這讓我想起了一個CollectionViewSource,它被重用,因此保留了選定的項目。這可能嗎?

感謝您的見解。

回答

1

我發現從比亞Stollnitz一個有趣的article,她說:

CollectionViewSource也使另一個有趣的場景。如果某個特定的CollectionViewSource在不同時間指向不同的集合,它會記住它創建的所有視圖以包裝這些集合。如果已經設置的源再次被設置,CVS會識別它並重新使用它原來創建的視圖。此行爲在分層綁定方案中很有用。

這可能是我正在尋找的答案。我的下一個問題是:是否可以禁用此行爲?

相關問題