如何在同一解决方案中导航到另一个项目

时间:2013-12-06 09:20:15

标签: c# visual-studio-2012 mvvm windows-phone-8 navigationservice

嘿希望有人可以提供帮助。

我在小组中开发了许多不同的项目,我们现在想要将它们结合起来。因此,我包括了这些项目。 在启动项目中,我包含对其他项目的引用。 然后我使用另一个stackoverflow线程中的代码:

How to navigate to view from another project

这给了我以下

    NavigationService.Navigate(new Uri("/MVVMTestApp;/component/View/MainPage.xaml", UriKind.Relative));

项目构建并运行。但是当我按下应激活代码的按钮时,在执行该行之后/期间会出现错误。

中断错误位于MainPage.g.cs文件中,如下所示:

namespace MVVMTestApp {


public partial class MainPage : Microsoft.Phone.Controls.PhoneApplicationPage {

    internal System.Windows.Controls.TextBlock MainPageTitle;

    internal System.Windows.Controls.TextBlock LEgE;

    private bool _contentLoaded;

    /// <summary>
    /// InitializeComponent
    /// </summary>
    [System.Diagnostics.DebuggerNonUserCodeAttribute()]
    public void InitializeComponent() {
        if (_contentLoaded) {
            return;
        }
        _contentLoaded = true;
        *******System.Windows.Application.LoadComponent(this, new System.Uri("/MVVMTestApp;component/View/MainPage.xaml", System.UriKind.Relative));**
        this.MainPageTitle = ((System.Windows.Controls.TextBlock)(this.FindName("MainPageTitle")));
        this.LEgE = ((System.Windows.Controls.TextBlock)(this.FindName("LEgE")));
    }
}
}

我插入星星的线是它断裂的地方。我需要做些什么来使其发挥作用?

附加

正如评论中所说,我需要在组件之前包含一个前锋“/”,这是奇怪的,因为它没有在任何地方使用,否则就像上面的链接和这个链接

http://www.geekchamp.com/tips/wp7-navigating-to-a-page-in-different-assembly

但是包括转发器我得到一个错误,我不指向任何xaml文件。 排除了forwardslash,我发现了XamlParseException ......

所以我仍然有导航到另一个项目中的视图的问题。

ODD

我现在不必在组件之前拥有领先的前锋。只要我编写MVVMTestAppAssembly。我查看了汇编文件但找不到这个包含=?

在看了msdn之后我试了一下 http://msdn.microsoft.com/en-us/library/cc296240%28v=vs.95%29.aspx

但仍然没有运气,导航工作

OVerview of reference并包含元素的完整路径 enter image description here

enter image description here

一个解决方案 如一个答案中所述,一种解决方案是使用Windows phone类库。但是当我使用MVVM结构时,我无法使viewmodelLocator工作。因此,这对我来说不是一个解决方案。

但是如果你使用MVVM,我需要另一个解决方案。希望有人对此有所了解。 另一种解决方案 如下面的答案中所述,您可以使用以下内容 解决方案1:

您使用相同类型的项目“Windows Phone App”。在解决方案中,您需要有一个Windows Phone App项目,其他项目应该是Windows Phone Class Library类型。

然后,您可以使用以下代码行导航到同一解决方案中的另一个项目中查看:

    NavigationService.Navigate(new Uri("/MVVMTestApp;/component/View/MainPage.xaml", UriKind.Relative));

在项目之间导航。但是,在生成的xaml文件FILENAME.g.cs中出现错误,它会插入行loadcomponent。由于视图通过datacontext连接到视图模型,所以发生错误,据我所知。我一直无法解决它。

有人有一个解决方案吗?

4 个答案:

答案 0 :(得分:3)

只需删除&#34; /&#34;之前&#34;组件&#34;,像这样:

NavigationService.Navigate(new Uri(&#34; / MVVMTestApp; component / View / MainPage.xaml&#34;,UriKind.Relative));

答案 1 :(得分:2)

首先,您必须参考父项目

您可以通过此行解决该问题

  NavigationService.Navigate(new
 Uri("/MVVMTestApp;/View/MainPage.xaml", UriKind.Relative));

答案 2 :(得分:1)

解决方案1:

您使用相同类型的项目“ Windows Phone App ”。在解决方案中,您需要有一个Windows Phone App项目,其他项目应该是Windows Phone Class Library类型。

然后,您可以使用以下代码行导航到同一解决方案中的另一个项目中查看:

 NavigationService.Navigate(new Uri("/MVVMTestApp;/component/View/MainPage.xaml", UriKind.Relative));

解决方案2:

转到Debug中的 Configuration Manager

Configuration Manager

取消选中MVVMTestApp中的部署复选框。

Configuration Manager

答案 3 :(得分:0)

我认为问题出在你的设置上。根据您的描述,您可以将项目命名为MVVMTestApp。我认为这是启动项目。但是,您的引用是从TestUserControls到MVVMTestApp。这是倒退。我知道根据你想要做的事情似乎是对的,但事实并非如此(除非你的项目命名搞砸了。)

我建议你有两个项目:

  • MVVMTestApp(Windows Phone 8.1 Universal App即将启动 项目)
  • MVVMTestApp.Lib(支持Windows Phone的可移植类 8.1)

将MVVMTestApp的引用添加到MVVMTestApp.Lib。

MVVMTestApp将拥有MainPage.xaml&amp; SecondPage.xaml。

我建议您的Lib只有共享用户控件而不能导航到的页面。您可以将用户控件放在SecondPage上。

如果您确实希望在共享库中使用SecondPage,则处理起来会更难,但仍然可能。但是,您无法使用其他人建议的代码。让共享代码调用MVVMTestApp没有意义,因为它实际上不是可共享的。如果您有另一个与MVVMTestApp2共享的应用程序,该怎么办?如果您对MVVMTestApp进行了硬编码,即使您可以使其与MVVMTestApp一起使用,也可能无法工作,因此将SecondPage放在单独的项目中没有任何好处。

要拥有一个可回复应用的可共享页面,我认为您有两种选择。您可以使用Inversion of Control并在Lib中定义INavigationService。然后在您的MVVMTestApp中实现INavigateService并使用您最喜欢的Ioc容器注册您的实现。然后在您的Lib中,您可以在INavigationService上调用方法。在MVVMTestApp实现中,您可以使用其他帖子中提供的代码导航到主页。

另一个选择是在你的Lib中公开一个事件。您可以从MVVMTestApp中侦听事件,并在处理程序中导航到MainPage,就像在其他帖子中一样。在您的Lib中,当您想要导航到MainPage时,您将提升事件。

祝你好运&amp;玩得开心,

汤姆