是否可以从另一个项目中实例化PhoneApplicationPage
(在同一个解决方案中,但这不应该是重要的,是吗?)并显示它?
嗯,我知道可以用:
实例化另一个页面MyPageInProjectB bPage= new MyPageInProjectB ();
但是如何展示呢?
我想做以下事情: 我有两个项目,我想在另一个项目中显示一个项目的页面,并在它们之间传递数据。所以我认为这将是完美的:
public partial class MyPageInProjectA : PhoneApplicationPage
{
private MyPageInProjectB bPage;
public MyPageInProjectA()
{
InitializeComponent();
MyComplexObject objectIWantToPassToOtherPage = new MyComplexObject ();
bPage= new MyPageInProjectB (objectIWantToPassToOtherPage);
}
private void ShowBPageButton_Click(object sender, EventArgs e)
{
// this is now what I want to do, but what doesn't work
bPage.Show();
}
}
或者是否有另一种方法可以在这些页面之间传递复杂数据?
我不想使用查询字符串,因为有时发生(De-)Serializer与MyComplexObject
有问题。
我读了如何在这个帖子中的两个页面之间导航:How to redirect to a page which exists in specif project to another page in other project in the same solution? 但我想将一个复杂的对象从一个页面传递到另一个页面。我怎么能这样做?
答案 0 :(得分:3)
修改: 好的,现在仔细阅读你的问题后,我可以给你一个更好的答案。
首先,您无法将数据传递给页面构造函数,因为运行时本身在导航时处理实例创建,您只能使用NavigationService
进行导航。但是,您还有其他选择。
其中一个是使用查询字符串,但如果你不想使用它,你可以使用PhoneApplicationService
来存储你的复杂对象并从中读取另一个页面。
// In source page
MyComplexObject objectIWantToPassToOtherPage = new MyComplexObject ();
PhoneApplicationService.Current.State["MyComplexObject"] = objectIWantToPassToOtherPage;
NavigationService.Navigate(new Uri("/ProjectB;component/MyPageInProjectB.xaml", UriKind.Relative));
// In destination page's constructor
public MyPageInProjectB() {
var myComplexObject = (MyComplexObject) PhoneApplicationService.Current.State["MyComplexObject"];
// ...
}
除此之外是使用全局变量。这些是我能想到的唯一选择。
要导航到类库ProjectB
中的页面,您需要使用类似于以下内容的uri:
/{assemblyName};component/{path}
在您的情况下,您可以执行以下操作:
NavigationService.Navigate(new Uri("/ProjectB;component/MyPageInProjectB.xaml", UriKind.Relative));
请注意,我在此处指定了相对路径,因此MyPageInProjectB.xaml
需要位于ProjectB
内的根文件夹中才能使上述示例正常工作。