嘿希望有人可以提供帮助。
我在小组中开发了许多不同的项目,我们现在想要将它们结合起来。因此,我包括了这些项目。 在启动项目中,我包含对其他项目的引用。 然后我使用另一个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并包含元素的完整路径
一个解决方案 如一个答案中所述,一种解决方案是使用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连接到视图模型,所以发生错误,据我所知。我一直无法解决它。
有人有一个解决方案吗?
答案 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 。
取消选中MVVMTestApp中的部署复选框。
答案 3 :(得分:0)
我认为问题出在你的设置上。根据您的描述,您可以将项目命名为MVVMTestApp。我认为这是启动项目。但是,您的引用是从TestUserControls到MVVMTestApp。这是倒退。我知道根据你想要做的事情似乎是对的,但事实并非如此(除非你的项目命名搞砸了。)
我建议你有两个项目:
将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;玩得开心,汤姆