2012-06-20 22 views
0

我經常將20-30個非常複雜的UserControl插入/刪除到StackPanel。 所有UserControls已經創建和緩存以供重用。在重新使用控制之前,我清理舊的父母並記住控制權。WPF優化:從StackPanel插入/刪除子代

StackPanel.Children.Remove,StackPanel.Children.Add這樣的操作在我的場景中需要很長時間。

如何優化這些操作?例如。一次插入StackPanel中的所有控件,或者在收藏修改期間凍結通知?

可能誰知道重用wpf優化(MSDN除外)有用的文章?

回答

2

您可以覆蓋ObservableCollectionOnCollectionChanged()事件處理程序,以便一起禁用事件處理,或排列事件以便稍後處理。

看到這裏後,得到的回答可以幫助你 - https://stackoverflow.com/a/5491534/903056

+0

我如何知道StackPanel在內部實現中不使用ObservableCollection。它使用UIElementCollection,我不知道如何定製這個集合 – Victor

+0

我認爲你的StackPanel中的項目綁定到一個ObservableCollection(就像在MVVM中經常做的那樣)。 – EkoostikMartin

1

我想你需要考慮虛擬化的用戶界面和數據加載(如果有的話)的策略。

在這種特定情況下,使用像VirtualizingStackPanel這樣的控件可以使UI繪製更少的東西。您可以在this博客上獲得更多信息。

+0

我如何寫問題,我只在容器中使用〜20個控件。問題是我的孩子控制非常複雜。我認爲每個插入都會爲已經插入的控件導致水流通知。 – Victor