5

ちょっと誰かが助けてくれることを願っています。

私はグループでさまざまなプロジェクトを開発してきましたが、これらを組み合わせたいと考えています。したがって、私はプロジェクトを含めます。スタートアップ プロジェクトでは、他のプロジェクトへの参照を含めます。次に、別のスタックオーバーフロー スレッドのコードを使用します。

別のプロジェクトからビューに移動する方法

これにより、次のことがわかります

    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を見て試してみました

しかし、ナビゲーションを機能させるにはまだ運がありません

参照の概要と要素へのフルパスが含まれています ここに画像の説明を入力

ここに画像の説明を入力

1 つの解決策 1 つの回答で述べたように、1 つの解決策は Windows Phone クラス ライブラリを使用することです。しかし、MVVM 構造を使用すると、viewmodelLocator を機能させることができません。したがって、これは私にとって解決策ではありません。

しかし、MVVM を使用する場合は、別のソリューションが必要です。うまくいけば、誰かがこれについてのアイデアを持っています。 別の解決策 以下の回答で説明されているように、次の解決策 1 を使用できます。

同じ種類のプロジェクト「Windows Phone アプリ」を使用します。このソリューションでは、1 つの Windows Phone アプリ プロジェクトが必要であり、他のプロジェクトは Windows Phone クラス ライブラリ タイプである必要があります。

次に、次のコード行を使用して、同じソリューション内の別のプロジェクトに移動して表示できます。

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

プロジェクト間を移動します。ただし、生成された xaml ファイル FILENAME.g.cs でエラーが発生し、そこで行 loadcomponent が挿入されます。私が理解できる限り、ビューがデータコンテキストによってビューモデルに接続されているためにエラーが発生します。そして、私はそれを解決することができませんでした。

うまくいけば、誰かがこれに対する解決策を持っていますか?

4

4 に答える 4

0

問題はあなたの設定にあると思います。説明から、プロジェクトに MVVMTestApp という名前を付けます。これがスタートアッププロジェクトだと思います。ただし、リファレンスは TestUserControls から MVVMTestApp です。これは逆です。あなたがやろうとしていることは正しいように思えますが、そうではありません (プロジェクトの命名が台無しにされない限り)。

2 つのプロジェクトがあることをお勧めします。

  • MVVMTestApp (スタートアップ プロジェクトである Windows Phone 8.1 Universal App)
  • MVVMTestApp.Lib (Windows Phone 8.1 をサポートするポータブル クラス)

MVVMTestApp から MVVMTestApp.Lib への参照を追加します。

MVVMTestApp には MainPage.xaml と SecondPage.xaml があります。

あなたのライブラリには、ナビゲートするページではなく、共有ユーザーコントロールのみがあることをお勧めします。SecondPage にユーザー コントロールを配置できます。

共有ライブラリに SecondPage を含める場合は、処理が難しくなりますが、それでも可能です。ただし、他の人が提案したコードを使用することはできません。共有コードで MVVMTestApp を呼び出すのは意味がありません。実際には共有可能ではないからです。共有している MVVMTestApp2 という別のアプリがあった場合はどうなるでしょうか。MVVMTestApp で動作させることができたとしても、MVVMTestApp をハードコーディングした場合は動作しないため、SecondPage を別のプロジェクトに配置する利点はありません。

アプリにコールバックする共有可能なページを作成するには、2 つのオプションがあると思います。Inversion of Control を使用して、ライブラリで INavigationService を定義できます。次に、MVVMTestApp で INavigateService を実装し、実装をお気に入りの Ioc コンテナーに登録します。次に、Lib で INavigationService のメソッドを呼び出すことができます。MVVMTestApp の実装では、他の投稿で提供されているコードを使用してメイン ページに移動できます。

もう 1 つのオプションは、Lib でイベントを公開することです。MVVMTestApp からイベントをリッスンし、ハンドラーで他​​の投稿のように MainPage に移動します。Lib では、MainPage に移動するときにイベントを発生させます。

頑張って、楽しんでください。

トム

于 2014-12-24T16:18:10.543 に答える