3

全部,我是 Windows 7 Phone 的新手。我的情况是我有一个包含 a 的主页,而该主页又包含ScrollViewer一个StackPanel. 我想StackPanel用多个子StackPanel(在运行时)填充它,它们将保存一个图像缩略图、一个超链接和一些关于图像的基本信息。

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

显然有很多方法可以在页面之间传递数据

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

然后在其他页面中

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

和许多其他人。但是,从不同页面更新通用控件的最佳实践是什么?

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

  1. 在页面之间传递数据
  2. 如何将一个 xaml 页面中的图像值传递给 windows phone 7 中的另一个 xaml 页面?
  3. 将图像从一个页面传递到另一个 Windows Phone 7

和更多。这不是我要问的。

4

2 回答 2

3

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

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

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

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

如果这两个页面以某种方式同时可见并且它们之间不需要导航(例如弹出或滑动菜单类型的 ui),那么您可以将您在弹出窗口中显示的页面设置为用户控件,然后到达父母的控制由this.Parent。

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

于 2012-04-06T11:18:45.437 回答
2

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

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

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

于 2012-04-06T18:18:19.310 回答