Updating Multiple Page Controls on Windows Phone


All, I am new to Windows 7 Phone. My situation is that I have a main page which contains a ScrollViewer which in turn houses a StackPanel. I want to populate this StackPanel with multiple sub-StackPanels (at runtime) which are to hold an Image Thumb nail a hyperlink and some basic information about the image.

This is all good when I do this from the main page, but I want to know how to update this control (which is on the main page), but from any page other than the main page. I would like to know what is considered best practice for updating a page's control (like that outlined above) from another page.

Obviously there are a number of ways to pass data between pages

PhoneApplicationService.Current.State["yourparam"] = param
NavigationService.Navigate(new Uri("/view/Page.xaml", UriKind.Relative));

then in other page simply

var k = PhoneApplicationService.Current.State["yourparam"];

and many others. But what is best practice for updating a generic control from a different page?

Note: There are many question about data access and passing between pages.

  1. Passing data from page to page
  2. How to pass the image value in one xaml page to another xaml page in windows phone 7?
  3. Passing image from one page to another windows phone 7

and more. This is not what I am asking.

If I understand your question correctly, you are trying to update a control which is on for example MainPage.xaml from another page for example Page2.xaml.

As far as I know there is no way to reach a pages controls from another page, and that seems unnecessary for the cases that I can think of.

The method used to achieve what you are trying is usually done by triggering an action (like the press of a button ) and passing a parameter to the page you are trying to update the control. And on that page's onnavigatedto event (or viewmodel constructor if you are using the MVVM pattern), update your control based on the passed parameter.

If your update is based on data then the best practice is to bind an observable collection or an object that extends the INotifyPropertyChanged (basically any object that can signal that one of their property changed to the ui) and change the data based on the parameter that is passed.

If these two pages somehow are visible at the same time and there is no navigation needed between them( like a popup or sliding menu kind of ui) then you can make the page that you are showing in the popup a usercontrol, and reach to the parent's controls by this.Parent.

I can be more helpful if you give more specifics about your app's flow.