簡體   English   中英

如何在同一解決方案中導航到另一個項目

[英]How to navigate to another project inside same solution

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

我在小組中開發了許多不同的項目,我們現在想要將它們結合起來。 因此,我包括了這些項目。 在啟動項目中,我包含對其他項目的引用。 然后我使用另一個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

但是包括forwardslash我得到一個錯誤,那就是我沒有指向任何xaml文件。 排除轉發,我發現XamlParseException ....

所以我仍然有導航到另一個項目中的視圖的問題。

我現在不必在組件之前擁有領先的前鋒。 只要我編寫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連接到視圖模型,所以發生錯誤,據我所知。 我一直無法解決它。

有人有一個解決方案嗎?

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

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

首先,您必須參考Parent Project

你可以通過這條線解決這個問題

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

解決方案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中的Deploy復選框。

配置管理器

我認為問題出在你的設置上。 根據您的描述,您可以將項目命名為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放在單獨的項目中也沒有任何好處。

要有一個可共享的頁面回調應用程序,我認為你有兩個選擇。 您可以使用Inversion of Control並在Lib中定義INavigationService。 然后在您的MVVMTestApp中實現INavigateService並使用您最喜歡的Ioc容器注冊您的實現。 然后在您的Lib中,您可以在INavigationService上調用方法。 在MVVMTestApp實現中,您可以使用其他帖子中提供的代碼導航到主頁面。

另一種選擇是在你的Lib中暴露一個事件。 您可以從MVVMTestApp中偵聽事件,並在處理程序中導航到MainPage,就像在其他帖子中一樣。 在您的Lib中,當您想要導航到MainPage時,您將提升事件。

祝你好運,玩得開心,

湯姆

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM