יום שני, 7 במרץ 2011

פתרון אפשרי לבעיית ביצועים ב TreeView

בעיית performance חמורה כשניסיתי לעשות custom tree view + data binding להרבה נתונים.

בסופו של דבר התברר לי שה virtualization של ה TreeView נדפק כאשר מורידים trigger שמגיע ב default template של TreeViewItem

מה שגרם לייצור של כל ה TreeViewItems בפעם הראשונה בבת אחת.

התיקון הוא ב style של TreeViewItem (או מה שיורש ממנו) שמתחיל ב:

<Style TargetType="{x:Type TreeViewItem}">

באזור ה triggers

<ControlTemplate.Triggers>

חייבים להשאיר את השורות הבאות (או multi trigger וכו' שדואג שזאת תהיה התוצאה):

<Trigger Property="IsExpanded" Value="false">
    <Setter Property="Visibility" TargetName="ItemsHost" Value="Collapsed"/>
</Trigger>



במצב הזה העץ לא ייצור את הילדים של הענפים בעץ עד שיפתחו אותם ע"י Expand