2012-04-06 80 views
3

全部,我是Windows 7 Phone的新手。我的情况是,我有一个主页面,其中包含一个ScrollViewer,而这个页面又包含一个StackPanel。我想用多个sub StackPanel(在运行时)填充这个StackPanel,它们将Image Thumb钉子保存为一个超链接和一些关于图像的基本信息。从Windows Phone上的多个页面更新控件

当我从主页面执行此操作时,这是非常好的,但我想知道如何更新此控件(位于主页面上),而不是主页面以外的任何页面。我想知道从另一页面更新页面控件(如上所述)的最佳实践。

显然,有许多方法来

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

页面之间传递数据,然后在其他页面只是

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

等等。但是更新来自不同页面的通用控件的最佳做法是什么?

注意:关于页面之间的数据访问和传递有很多问题。

  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

多。这不是我所问的。

回答

3

如果我正确理解你的问题,你正尝试从另一个页面例如Page2.xaml更新一个例如MainPage.xaml的控件。

据我所知,没有办法从另一个页面到达页面控件,这对于我能想到的情况似乎是不必要的。

用于实现您所尝试的方法通常是通过触发某个操作(如按按钮)并将参数传递给您尝试更新控件的页面来完成。并且在该页面的onnavigatedto事件(或者如果您使用MVVM模式时使用viewmodel构造函数),请根据传递的参数更新控件。

如果您的更新基于数据,那么最佳做法是绑定可观察集合或扩展INotifyPropertyChanged的对象(基本上任何可以表示其属性之一已更改为ui的任何对象)并更改基于数据在传递的参数上。

如果这两个页面在某种程度上同时可见,并且它们之间不需要导航(例如弹出菜单或滑动菜单),那么您可以在弹出窗口中显示一个用户控件,并通过this.Parent获得父母的控制权。

如果您提供关于应用流程的更多细节,我可以更有帮助。

+0

这已经非常有帮助。你在第一段中说得对。我有一个基本的Windows Phone应用程序,最多只有3/4页。主页面将包含将在应用程序中的其他页面上创建的照片和信息。我想我可以将我想要显示的信息存储在IsolatedStorage中,并获取信息并在恢复时从其中填充主页面。我一定会看看MVVM模式,我听说过它,但我对windows phone开发非常陌生,感谢您的时间... – MoonKnight 2012-04-06 11:33:37

+1

您可以将您的主页面要访问的数据保存在全球静态课程,当您回到主页面时,需要从该课程获取照片和其他必要数据并更新您的用户界面,这不是一个非常优雅的解决方案,但它可以完成工作。 但是对于小型应用程序或者像1或2个人这样的非常小的团队来说,MVVM是一个很好的模式,它可能会不必要的复杂化。绝对要学习它,但如果你不是单独与UI设计师和代码隐藏开发人员合作,你可能不需要使用MVVM。 – omerkirk 2012-04-06 12:08:51

+0

非常感谢您的建议...... – MoonKnight 2012-04-06 12:17:29

2

MVVM模式将是一个好方法。说MVVM对于小团队来说太复杂并不完全准确--MVVM的目的是分离Silverlight或WPF代码。使用Silverlight页面的代码隐藏来直接访问数据会在代码中产生耦合,并累积技术债务。无论你是一名开发人员还是100人,如果你的UI与你的数据类相结合,如果你必须改变你的数据类,你将不得不改变使用这些类的每个UI元素。这需要更长的时间,并使您的应用程序更难以更改。

MVVM使它成为你的UI(视图)不知道任何有关数据(你的模型)。 ViewModel是UI可以绑定到的UI之间的代码,以及管理UI中需要保存到模型中的事件的代码,以及需要在View中表示的Model中的代码。出于这个原因,它处理事件,这就是你在代码中需要的东西 - 一个可以隐藏代码的事件,可以在数据更改时更新绑定到它的Views。如果您有两个页面,则其中一个页面上的事件将被发送到ViewModel,如有必要,它将更改Model(数据),并将其传递回ViewModel。然后,ViewModel将更新绑定到该数据段的任何UI元素(视图)。

关于如何实现MVVM设计模式here 有一个非常好的演示。这个人经历了一个典型的WPF应用程序(就像Silverlight一样),UI代码隐藏实现了直接访问数据的事件处理程序,并使用MVVM模式重构它。