This is a migrated thread and some comments may be shown as answers.

Strange ItemTemplate behavior

7 Answers 47 Views
SlideView
This is a migrated thread and some comments may be shown as answers.
This question is locked. New answers and comments are not allowed.
Mirko
Top achievements
Rank 1
Mirko asked on 10 Jul 2013, 02:45 PM
Hi, we're experiencing strange behavior when using SlideView for image gallery with custom ItemTemplate/UserControl. We've discovered, that UserControl instances are not recycled/used in deterministic order, but rather somehow in random.

Example, If I got collection of 5 images, that is displayed using SlideView
Default situatio is 

(no preceding page)
Img1 shown using 1st UserControl instance
Img2 preloaded using 2nd UserControl instance

When I scroll to the right, the expected situation is
Img1 preloaded using 1st UserControl instance
Img2 shown using 2nd UserControl instance
Img3 preloaded using 3rd UserControl instance

But the observed behavior after scrolling to the right is 
Img1 preloaded using 2nd UserControl instance
Img2 shown using 3rd UserControl instance
Img3 preloaded using 1st UserControl instance


This is is causing flickering effect when scrolling between pages, because DataContext of all UserControl instances is changed.
Am I doing something wrong, or this is expected behavior. Could it be fixed somehow?
Thanks

Edit: the intention here is simple, when I open the page with SlideView and the 1st and 2nd page is fully loaded, I scroll form page 1 to 2, I don't want the 2nd page load again just because internally another UserControl is shown for the 2nd page. I want to see the already preloaded usercontrol for the 2nd page.

7 Answers, 1 is accepted

Sort by
0
Todor
Telerik team
answered on 11 Jul 2013, 08:18 AM
Hi Mirco,

Thank you for writing.

The behavior that you have explained is expected with the current implementation of RadSlideView. However, we are in the process of modifying the approach we use to load the items. Indeed, when the selection is changed, there is no need to load all three items again, but only the one(s) that haven't been loaded yet.

The update in RadSlideView will become part of our Service Pack release, scheduled for next week, so stay tuned and look for the update. 

Regards,
Todor
Telerik
Have a suggestion or face a problem - you can use the Ideas & Feedback portal to submit ideas, feedback and vote for them.
0
Mirko
Top achievements
Rank 1
answered on 11 Jul 2013, 10:23 AM
Hi, I've created simple demonstration project, where this issue is clearly seen - SlideView vs Panorama. The ItemTemplate instances are just randomly rearrange after each page change. When testing check also the Output window, that is shown used itemTemplates when swiping.

Because of this bug we currently cannot use this control anywhere in our app, but I appreciate that update will be available soon, thanks.

http://sdrv.ms/16tDboA
0
Todor
Telerik team
answered on 16 Jul 2013, 08:44 AM
Hello Mirko,

Thank you for sending a sample project.

It was useful for us to confirm that the Service Pack that we are releasing later this week will be helpful for your scenario as well.

Regards,
Todor
Telerik
Have a suggestion or face a problem - you can use the Ideas & Feedback portal to submit ideas, feedback and vote for them.
0
Mirko
Top achievements
Rank 1
answered on 18 Jul 2013, 02:04 PM
Thanks, it works now as expected.
Maybe I got another one question, would it be possible in SlideView to recycle only three ItemTemplate instances (as an option) instead of creating new instance every time new page should be preloaded?
0
Todor
Telerik team
answered on 19 Jul 2013, 02:05 PM
Hello Mirko,

RadSlideView uses three containers to load the selected item and its adjacent items. However, the template that is used to display them might not be the same and this is why we prefer to evaluate it each time when the selection is changed. This is necessary since the ItemTemplateSelector property allows you to use different templates depending on the data that is currently displayed. The ItemPreviewTemplate property also allows you to use different templates: one the selected item and another for the adjacent items. These usages would conjunct with an option that would allow you to reuse the template and might lead to unexpected behavior in many cases.

However, if you provide some more details about your scenario and show us if the current implementation of RadSlideView puts some limitations and restricts you to achieve your desired behavior we may consider adding such an option.

Regards,
Todor
Telerik
Have a suggestion or face a problem - you can use the Ideas & Feedback portal to submit ideas, feedback and vote for them.
0
Mirko
Top achievements
Rank 1
answered on 30 Jul 2013, 02:20 PM
Hi,
the idea for recycling only three ItemTemplate instances is simple:

The expected behavior I'd like to have:

(no preceding page)
Img1 shown using 1st UserControl instance
Img2 preloaded using 2nd UserControl instance
When I scroll to the right, the expected situation is
Img1 preloaded using 1st UserControl instance
Img2 shown using 2nd UserControl instance
Img3 preloaded using 3rd UserControl instance
After next scrolling to the right:
Img2 preloaded using 2nd UserControl instance
Img3 shown using 3rd UserControl instance
Img4 preloaded using 1st UserControl instance
After next scrolling to the right:
Img3 preloaded using 3rd UserControl instance
Img4 shown using 1st UserControl instance
Img5 preloaded using 2nd UserControl instance

The current behavior I see:
(no preceding page)
Img1 shown using 1st UserControl instance
Img2 preloaded using 2nd UserControl instance
When I scroll to the right, the expected situation is
Img1 preloaded using 1st UserControl instance
Img2 shown using 2nd UserControl instance
Img3 preloaded using 3rd UserControl instance
After next scrolling to the right:
Img2 preloaded using 2nd UserControl instance
Img3 shown using 3rd UserControl instance
Img4 preloaded using 4th UserControl instance
After next scrolling to the right:
Img3 preloaded using 3rd UserControl instance
Img4 shown using 4th UserControl instance
Img5 preloaded using 5th UserControl instance


You can imagine if the UserControl uses several megabytes of memory, or even it contain 3rd party component (like Ad banner), that is memory leaking, this can lead to serious problems.
Adding this functionality as third ItemRealizationMode should not be hard in my opinion and it would help us a lot.
Thanks.

Edit: just found another bug, if you swipe between SlideView items, go forward to another app page and go back, ItemTemplate for different item from the ItemsSource is shown. I've udpated the sample with reproduction scenario for this bug here (SlideViewBug2): 
http://sdrv.ms/12BWAYJ  follow the steps in "SlideViewPageHtml.xaml.cs"
0
Todor
Telerik team
answered on 02 Aug 2013, 11:55 AM
Hello Mirko,

When you scroll to the right and the Img4 is loaded in the 4th UserControl instance, the 1st UserControl instance will be no longer necessary and the memory it consumes will be eventually regained by the GarbageCollector. However, if you have experienced such memory leaks please let us know.

As to the issue when navigating back, I was able to reproduce it and I can confirm that it will be fixed with the next internal build.

Thank you for reporting it and for your continuous cooperation. I have updated your Telerik points accordingly.

Regards,
Todor
Telerik
Have a suggestion or face a problem - you can use the Ideas & Feedback portal to submit ideas, feedback and vote for them.
Tags
SlideView
Asked by
Mirko
Top achievements
Rank 1
Answers by
Todor
Telerik team
Mirko
Top achievements
Rank 1
Share this question
or