Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How to programmatically add items to a PanoramaItem in WP7

I am developing an application that has a dynamic number of PanoramaItems, now currently these are all added by binging a list of them to the Panorama by using its 'ItemsSource' property.

But the problem comes when I try to add things to the created PanoramaItems. Now, I can add a ListBox, and that works as expected, but I'd really like to add something I have a bit more control over (possibly some type of custom control).

Now, I've found a fair few places that show me how to do this by editing the MainPage.xaml, but since I don't know how many of them I need I cant (I think) do it like that.

The problem is added to by the fact that the PanoramaItem class doesn't have an 'Items' property, just a 'Content' one (which is what I think I need).

I think I need to define a .xaml/.cs file for the custom control and then somehow apply that to the PanoramaItem but I'm really not sure

like image 861
Andrew Thorpe Avatar asked Jan 29 '11 20:01

Andrew Thorpe


2 Answers

I'm going to assume here that you're using a MVVM framework here, so if not, I apologize.

Your correct in thinking that you'll probably want to use a user control for the Pano Items. Once you've got that going here's the new XAML code:

<controls:Panorama ItemsSource="{Binding PanoViewModels}">
     <controls:Panorama.ItemTemplate>
          <DataTemplate>
               <ctl:PanoItemControl />
          </DataTemplate>
     </controls:Panorama.ItemTemplate>
</controls:Panorama>

obviously this is simplified, but should get the idea across. In your control you can bind directly to objects contained within PanoViewModels.

like image 63
Barranger Ridler Avatar answered Nov 15 '22 07:11

Barranger Ridler


If you are doing MVVM and databinding then Barranger Ridler's answer looks good.

If you want to write custom C# code for each child, then you need to put a container (e.g. a Grid or StackPanel) at the Content of each PanoramaItem - and you can then Add to the Children of that container. I don't have c# code to hand, but here's the ironruby code - it adds 5 TextBlocks to a StackPanel then sets that StackPanel as the content of the PanoramaItem - it should be pretty easy to port across.

stack_panel = StackPanel.new

for i in 1..5
  t = TextBlock.new
  t.font_size = i*24 
  t.text = "Line " << i.to_s
  s.children.add t
end

pi = PanoramaItem.new
pi.header = "Title"
pi.content = stack_panel

panorama.items.add pi

based on code http://script.iron7.com/#/Script/Detail?scriptId=ed9e4e216a474432a9e88523b201965d&userLowerCaseName=stuart

like image 39
Stuart Avatar answered Nov 15 '22 07:11

Stuart