Windows phone 7 从Windows Phone上的多个页面更新控件

Windows phone 7 从Windows Phone上的多个页面更新控件,windows-phone-7,user-controls,Windows Phone 7,User Controls,总之,我是Windows7手机的新手。我的情况是,我有一个主页,其中包含一个ScrollViewer,而它又包含一个StackPanel。我想在这个StackPanel中填充多个子StackPanels(在运行时),用于保存图像缩略图、超链接和有关图像的一些基本信息 当我从主页面执行此操作时,这一切都很好,但我想知道如何更新此控件(位于主页面上),但要从主页面以外的任何页面进行更新。我想知道从另一个页面更新页面控件(如上所述)的最佳实践是什么 显然,在页面之间传递数据有多种方法 PhoneApp

总之,我是Windows7手机的新手。我的情况是,我有一个主页,其中包含一个
ScrollViewer
,而它又包含一个
StackPanel
。我想在这个
StackPanel
中填充多个子
StackPanel
s(在运行时),用于保存图像缩略图、超链接和有关图像的一些基本信息

当我从主页面执行此操作时,这一切都很好,但我想知道如何更新此控件(位于主页面上),但要从主页面以外的任何页面进行更新。我想知道从另一个页面更新页面控件(如上所述)的最佳实践是什么

显然,在页面之间传递数据有多种方法

PhoneApplicationService.Current.State["yourparam"] = param
NavigationService.Navigate(new Uri("/view/Page.xaml", UriKind.Relative));
然后在另一页简单地

var k = PhoneApplicationService.Current.State["yourparam"];
还有很多其他的。但是从不同页面更新通用控件的最佳实践是什么?

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


  • 还有更多。这不是我要问的。

    如果我正确理解了您的问题,您正在尝试从另一个页面(例如Page2.xaml)更新MainPage.xaml上的控件

    据我所知,无法从另一个页面访问页面控件,对于我所能想到的情况来说,这似乎是不必要的

    用于实现您尝试的方法通常是通过触发操作(如按下按钮)并向您尝试更新控件的页面传递参数来完成。在该页面的onnavigatedto事件(如果使用MVVM模式,则为viewmodel构造函数)中,根据传递的参数更新控件

    如果您的更新基于数据,那么最佳做法是绑定一个可观察的集合或一个扩展INotifyPropertyChanged的对象(基本上是任何可以向ui发送其属性更改信号的对象),并根据传递的参数更改数据

    如果这两个页面以某种方式同时可见,并且它们之间不需要导航(如弹出式或滑动菜单类ui),则您可以将弹出式窗口中显示的页面设置为用户控件,并通过this.parent访问父控件


    如果您能提供更多关于应用程序流程的详细信息,我会更有帮助。

    MVVM模式将是一个不错的选择。说MVVM对于小型团队来说太复杂并不准确——MVVM的目的是解耦Silverlight或WPF代码。使用Silverlight页面的codebehind直接访问数据会在代码中产生耦合并累积技术债务。无论您是一名开发人员还是100名开发人员,如果您的UI与数据类结合在一起,如果您必须更改数据类,则必须更改使用这些类的每个UI元素。这需要更长的时间,并且使您的应用程序更难更改

    MVVM使您的UI(视图)对数据(模型)一无所知。ViewModel是UI可以绑定到的代码,它管理UI中需要持久化到模型的事件,以及需要在视图中表示的模型中的更改。出于这个原因,它处理事件,这听起来像是您在代码中需要的——一个可以存在于codebehind之外的事件,可以在数据更改时更新绑定到它的视图。如果有两个页面,则其中一个页面上的事件将发送到ViewModel,如果需要,ViewModel将对模型(数据)进行更改,并将其传递回ViewModel。然后,ViewModel将更新绑定到该数据段的任何UI元素(视图)

    对于如何实现MVVM设计模式,有一个非常好的演示
    . 这家伙经历了一个典型的WPF应用程序(就像Silverlight),其中UI codebehind实现了直接访问数据的事件处理程序,并使用MVVM模式对其进行重构

    这已经非常有用了。你的第一段是正确的。我有一个基本的windows phone应用程序,最多有3/4页。主页将包含应用程序中其他页面上创建的照片和信息。我想我可以将我想要显示的内容存储在IsolatedStorage中,并在主页恢复时从那里获取信息和填充主页。我一定会查看MVVM模式,我听说过,但我对windows phone开发非常陌生,感谢您的时间…您可以将主页访问的数据保存在全局静态类中,当您导航回主页时,从该类中拍摄照片和其他必要的数据,并更新您的UI,这不是一个非常优雅的解决方案,但它将完成工作。MVVM是一个很好的学习模式,但是对于小型应用程序,或者非常小的团队(如1人或2人),它可能会变得不必要的复杂。当然要学习它,但是如果你没有分别与ui的设计师和codebehind的开发者合作,你可能不需要使用MVVM。