全部,我是Windows 7手机的新手。我的情况是我有一个包含ScrollViewer
的主页面,而StackPanel
则包含StackPanel
。我想用多个子StackPanel
(在运行时)填充这个PhoneApplicationService.Current.State["yourparam"] = param
NavigationService.Navigate(new Uri("/view/Page.xaml", UriKind.Relative));
,这将保持Image Thumb钉子的超链接和一些关于图像的基本信息。
当我从主页面执行此操作时,这一切都很好,但我想知道如何更新此控件(位于主页面上),但是要从主页以外的任何页面更新。我想知道从另一个页面更新页面控件(如上所述)的最佳实践。
显然,有很多方法可以在页面之间传递数据
var k = PhoneApplicationService.Current.State["yourparam"];
然后在其他页面中
{{1}}
和其他许多人。但从不同页面更新通用控件的最佳做法是什么?
注意:有很多关于数据访问和页面间传递的问题。
答案 0 :(得分:3)
如果我正确理解了您的问题,那么您正尝试从另一个页面(例如Page2.xaml)更新一个控件,例如MainPage.xaml。
据我所知,没有办法从另一个页面到达页面控件,这对于我能想到的案例来说似乎没有必要。
用于实现所尝试内容的方法通常通过触发操作(如按下按钮)并将参数传递给您尝试更新控件的页面来完成。在该页面的onnavigatedto事件(或viewmodel构造函数,如果您使用MVVM模式),根据传递的参数更新您的控件。
如果您的更新基于数据,那么最佳做法是绑定一个可观察集合或一个扩展INotifyPropertyChanged的对象(基本上任何可以表明其属性之一已更改为ui的对象)并根据数据更改数据传递的参数。
如果这两个页面在某种程度上同时可见并且它们之间不需要导航(如弹出窗口或滑动菜单类型的ui)那么您可以使弹出窗口中显示的页面成为用户控件,并且通过this.Parent到达父母的控件。
如果您提供有关应用流程的详细信息,我会更有帮助。
答案 1 :(得分:2)
MVVM模式将是一个很好的方式。对于小型团队而言,MVVM过于复杂并不准确 - MVVM的目的是解耦Silverlight或WPF代码。使用Silverlight页面的代码隐藏直接访问数据会在代码中产生耦合并产生技术债务。无论您是一个开发人员还是100个,如果您的UI与数据类相结合,如果您必须更改数据类,则必须对使用这些类的每个UI元素进行更改。这需要更长的时间,使您的应用程序更难以更改。
MVVM使得你的UI(View)对数据(你的模型)一无所知。 ViewModel是UI可以绑定的代码,用于管理UI中需要持久保存到Model的事件,以及需要在View中表示的Model中的更改。出于这个原因,它处理事件,这就是你在代码中需要的东西 - 一个可以存在于代码隐藏之外的事件,可以在数据发生变化时更新绑定到它的Views。如果您有两个页面,那么其中一个页面上的事件将被发送到ViewModel,如果需要,它将对Model(数据)进行更改,并将其传递回ViewModel。然后,ViewModel将更新绑定到该数据的任何UI元素(视图)。
有一个很好的演示如何实现MVVM设计模式here 。这个人经历了一个典型的WPF应用程序(就像Silverlight一样),其中UI代码隐藏实现了直接访问数据的事件处理程序,并使用MVVM模式对其进行重构。