1

私は WPF と Prism を初めて使用しますが、Unity で View をオブジェクトとして登録する必要があることを既に学びました。

Container.RegisterType<Object,MyView>("My.Assembly.MyView");

それでも、私が使用するとき

var RelativeUriToMyView = new Uri("My.Assembly.MyView",UriKind.Relative);    
RegionManager.RequestNavigate(RelativeUriToMyView, RegionName, CallbackResult);

MyView は System.Object として表示され、CallbackResult にはエラーが含まれていません。

私は何が欠けていますか?必要に応じて、さらに情報を提供させていただきます。

4

2 に答える 2

2

PRISM ソース コードの RegionNavigationContentLoader.cs を参照してください。ビューをロードするコードは次のとおりです。

    protected virtual object CreateNewRegionItem(string candidateTargetContract)
    {
        object newRegionItem;

        try
        {
            newRegionItem = this.serviceLocator.GetInstance<object>(candidateTargetContract);
        }
        catch (ActivationException e)
        {
            throw new InvalidOperationException(
                string.Format(CultureInfo.CurrentCulture, Resources.CannotCreateNavigationTarget, candidateTargetContract),
                e);
        }
        return newRegionItem;
    }

URI を受け取り、クエリ文字列を抽出し、ビューを検索してオブジェクトとしてキャストするために使用される「名前」を作成するヘルパー メソッドがいくつかあります。

基本的に、具象クラスをオブジェクトとして Unity に関連付けるために使用する名前は、Unity でオブジェクトを解決しようとするときに使用する必要がある名前と同じです。説明する擬似コードを次に示します。

Container.RegisterType<object, ConcreteClass>(typeof(ConcreteClass).FullName);

Locator.GetInstance<object>(UriWithFullName)

これで何も解決しない場合は、内容を確認できるように RelativeUriToMyView を投稿してください。幸運を。

于 2011-08-02T20:12:24.573 に答える
1

この問題は、ビューを名前(MyView)ではなくFullName(My.Assembly.MyView)で登録したことが原因であると思われます。

編集: 問題をより正確に反映するように質問を変更しました。

于 2011-08-02T15:23:23.830 に答える