【问题标题】:How to navigate to another project inside same solution如何导航到同一解决方案中的另一个项目
【发布时间】:2013-12-06 09:20:15
【问题描述】:

嘿希望有人能帮忙。

我在小组中开发了许多不同的项目,我们现在想将这些结合起来。因此,我将这些项目包括在内。 在启动项目中,我包括对其他项目的引用。 然后我使用另一个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")));
    }
}
}

我插入星星的那条线就是它中断的地方。我需要做什么才能让它发挥作用?

额外

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

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

但包括正斜杠,我收到一个错误,指出我指向的位置不存在任何 xaml 文件。 排除正斜杠,我得到一个 XamlParseException 发生....

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

奇数

我现在不必在组件之前有前导正斜杠。只要我写 MVVMTestAppAssembly。我查看了汇编文件,找不到这个包含=?

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

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

参考概览并包含元素的完整路径

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

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

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

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

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

在项目之间导航。但是,您在生成的 xaml 文件 FILENAME.g.cs 中会出现错误,它会在其中插入行 loadcomponent。据我所知,由于数据上下文将视图连接到视图模型,因此发生错误。而且我一直没能解决。

希望有人对此有解决方案吗?

【问题讨论】:

  • 在组件之前添加/
  • @techloverr 谢谢你,解决了错误,但现在我在 RootFrame_NavigationFailed 中遇到另一个错误。 “未找到 XAML……”。我的启动项目是TestUserControls,我想去的项目是MVVMTestApp,以及我上面展示的路径。这个错误的任何想法?这个错误是在我想去的项目的 app.xaml.cs 文件中发现的?
  • 这是你的启动页面
  • @techlorr 我从项目 TestUserControl 开始。第1页:FirstPage,导航到第2页:AnimationPage,我在其中做一些启动动画,第3页:菜单概述。在菜单中,我单击一个按钮并使用导航服务转到新项目 MVVMTestApp。并且出现了新的错误。
  • 在MVVMTestApp中,视图在哪里?

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


【解决方案1】:

只需在“组件”之前删除“/”,如下所示:

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

【讨论】:

    【解决方案2】:

    首先你必须参考父项目然后

    你可以通过这条线解决这个问题

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

    【讨论】:

    • 我现在正在尝试,它给出了在该位置找不到 XAML 的相同错误。
    • 父项目是什么意思?我不想像其他解决方案状态那样更改库
    【解决方案3】:

    解决方案 1:

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

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

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

    解决方案 2:

    在调试中转到配置管理器

    从 MVVMTestApp 取消选中 Deploy 复选框。

    【讨论】:

    • 我无法从其他项目中获得该名称?
    • @JTIM 您需要为尝试在 xaml 中导航的视图命名。
    • 仍然没有帮助,我需要在组件之前包含一个正斜杠,以免出现 XamlParseException。
    • @Roman 该位置没有 xaml 文件。这很奇怪。
    • @JTIM 你能截取你的解决方案结构吗?
    【解决方案4】:

    我认为问题在于您的设置。根据您的描述,您将项目命名为 MVVMTestApp。我认为这是启动项目。但是,您的参考是从 TestUserControls 到 MVVMTestApp。这是倒退。我知道根据您的尝试,这似乎是正确的,但事实并非如此(除非您的项目命名混乱。)

    我建议你有两个项目:

    • MVVMTestApp(正在启动的 Windows Phone 8.1 通用应用程序 项目)
    • MVVMTestApp.Lib(支持 Windows Phone 的可移植类 8.1)

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

    MVVMTestApp 将具有 MainPage.xaml 和 SecondPage.xaml。

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

    如果您确实想在共享库中包含 SecondPage,则处理起来会比较困难,但仍然可以。但是,您将无法使用其他人建议的代码。让共享代码调用 MVVMTestApp 是没有意义的,因为那样它就不是真正可共享的。如果您有另一个要与之共享的应用程序,称为 MVVMTestApp2。如果您对 MVVMTestApp 进行硬编码,即使您可以使其与 MVVMTestApp 一起使用,您也无法工作,因此将 SecondPage 放在单独的项目中不会有任何好处。

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

    另一种选择是在您的 Lib 中公开一个事件。您收听来自 MVVMTestApp 的事件,并在处理程序中导航到 MainPage,就像在其他帖子中一样。在你的 Lib 中,当你想导航到 MainPage 时,你会引发事件。

    祝你好运,玩得开心,

    汤姆

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2023-01-19
      • 2020-05-08
      • 1970-01-01
      • 2021-08-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-07-19
      相关资源
      最近更新 更多