4

是否可以从另一个项目中实例化一个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.

我在此线程中阅读了如何在两个页面之间导航:如何将特定项目中存在的页面重定向到同一解决方案中其他项目中的另一个页面? 但我想将一个复杂的对象从一个页面传递到另一个页面。我怎样才能做到这一点?

4

1 回答 1

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才能使上面的示例正常工作。

于 2013-07-04T13:57:15.090 回答