如何在Silverlight中的页面之间传递对象?

时间:2010-12-06 16:04:40

标签: .net silverlight

例如:


NavigationService.Navigate(new Uri("/PlayerLost.xaml", UriKind.Relative));

我不想使用查询字符串。 我听说过viewmodel ...... 谢谢。

4 个答案:

答案 0 :(得分:2)

迟到的回答,但我也试图找到答案。希望这适合你,但它在VB中。希望它很容易破译。我有一个名为ITRSClass的类。在我的MainPage.xaml.vb上,我有:

Public Shared myClass As New ITRSClass

这也可以是任何对象或变量,例如:

Public Shared myString as New String = "My New String"

然后,从我打开的新页面(在我的例子中称为Setup.xaml.vb)中,我可以像这样获得对该对象或变量的引用:

Dim mySharedClass = MainPage.myClass

或:

Dim mySharedString = MainPage.myString

在我的情况下,我有一个类的ObservableCollection,用于根据我的(Setup.xaml.vb)页面的结果更新我的MainPage上的ListBox。

以下是我了解这一点的原因 - 更好的解释:Dave Corun's Blog

答案 1 :(得分:1)

您可以先手动创建页面,然后设置ContentFrame的Content属性,而不是使用“导航”。使用该方法,您可以将公共属性公开给您的对象,并在将其加载到ContentFrame之前进行设置:

Views.MyView vw = new Views.MyView();
vw.MyParameter = ... ;
this.ContentFrame1.Content = vw;

或者您可以使用全局变量,但明智地使用它们:)

答案 2 :(得分:1)

没有传递对象的好方法,并记住传递对象可能导致的问题 - 如果此框架是浏览器集成的(默认情况下,浏览器中的后退/前进按钮与您的框架一起工作)那么这意味着将在用户浏览器中显示的URL将以“/PlayerLost.xaml”结尾

然后,如果该URL被复制/粘贴(或者收藏了等等)并且用户返回页面,那么您想要移动的对象将不在那里(因为它是一个新鲜的app实例)。

所以你最好在这种状态下使用查询字符串,因为状态在URL中,应用程序可以在正常执行期间或通过深层链接获取它。

如果您需要传递的数据太复杂而无法表示查询字符串,那么将对象存储在“global”的某个位置(以通常的方式向Application类添加属性,或者在某处创建静态属性)和访问它来自结果页面。该页面应该对这些数据不具有弹性(对于深层链接方案)。

答案 3 :(得分:0)

我所做的很简单:( vb示例) 在app.xaml.vb文件中,打开文件,您将看到:

部分公共类应用     继承应用程序

添加 部分公共类应用程序     继承应用程序     公共共享wname为字符串

然后在要使用变量的页面中,只需调用app.wname

即可

完成!

快乐的编码!

亚瑟