5

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

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

如何导航到另一个项目的视图

这给了我以下

    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 文件。排除正斜杠,我得到一个 XamlParseException 发生......

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

奇怪的

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

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

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

参考概述并包含元素的完整路径 在此处输入图像描述

在此处输入图像描述

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

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

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

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

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

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

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

4

4 回答 4

3

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

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

于 2014-12-24T06:15:33.107 回答
2

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

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

  NavigationService.Navigate(new
 Uri("/MVVMTestApp;/View/MainPage.xaml", UriKind.Relative));
于 2013-12-06T11:02:07.733 回答
1

解决方案1:

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

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

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

解决方案2:

转到调试中的配置管理器。

配置管理器

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

配置管理器

于 2013-12-06T10:03:53.227 回答
0

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

我建议你有两个项目:

  • MVVMTestApp (Windows Phone 8.1 Universal App 是启动项目)
  • 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 时,您将引发事件。

祝你好运,玩得开心,

汤姆

于 2014-12-24T16:18:10.543 回答