我在Silverlight 4應用程序中使用TreeView來創建ChildWindow。 ItemSource綁定到ViewModel中的Items的ObservableCollection。當窗口打開時,從web服務加載項目。當ItemSource發生變化時展開TreeView中的Root
我只有一個根節點,我需要它最初擴展。 TreeView甚至具有擴展ExpandToDepth()這看起來很完美,但我不知道我可以稱它爲何。從ItemSource更新項目後,我沒有找到發生的事件。
我嘗試在TreeView中使用ItemContainerGenerator.ItemChanged和OnItemsChanged,但它們都在生成樹視圖項目之前執行,因此展開命令將不起作用。
我該如何得到這個工作?
如果我在collectionChanged中調用它們或立即在ViewModel中設置itemSoure屬性後展開操作不起作用。我嘗試了以下代碼: 'var x = treeView.ContainerFromItem(treeView.Items [0]); x.IsExpanded = true;' 當我在collectionChanged後執行它時,根節點已經在Items中,但還沒有容器。稍後從按鈕單擊事件調用此工作正常。 我以某種方式需要等待treeView創建容器並將其添加到控件,然後再執行此操作。 – Jarvis 2011-04-15 12:28:31
如果您的TreeView項目有項目模板,那麼您可以註冊項目的Loaded事件,並且在處理程序中可以將TreeView的IsExpanded設置爲true。爲了確保過濾掉所有其他項目的Loaded事件,您可以綁定您的Tag屬性控制到DataContext和處理程序還檢查發件人的標籤是ItemsSource的第一個元素。 – Sonosar 2011-04-15 12:44:10