Is there an event that tells me when a list box item comes into view?
The problem I have is that I can have several thousand elements that I set as my ListBox.ItemSource
. Each element will generate a bitmap (which takes a while) so if I would just put this bitmap generation in the constructor creating the collection would take forever to create. Instead I want to defer the bitmap generation when an item comes into view.
Is there a way to do this? Ideally I would prefer not to loop through all the items and check if they are visible.
You could handle the
Loaded
event of theListBoxItem
container:You could use
SelectedItem
to get the initial selection and then you could generate your bitmaps for the few above and below it - the exact number will depend on the size of your bitmaps and the size of yourListBox
.I suggest you generate a slightly larger range than you can see so when you pan up/down your list you're not constantly waiting while you render the new bitmaps; think of Google maps - if you pan a short distance the image is already there and it's only when you pan a larger distance that you have to wait for it to redraw.
As you pan up/down your list you could use
IsMouseOver
to find the item that you're currently hovering over and then update your rendered bitmaps accordingly, again slightly more than you can see.