0

モジュールをdllからレイジースクリーンとしてTransitionContentControlにロードするWPFアプリに取り組んでいます。モジュール内のビューモデルのビューは、標準の命名規則に従うと正しく表示されます。ただし、次の 2 つの問題があります。

1)モジュール自体は、外部の「ウィジェット」、さらに別のdllからロードされたビューを持つ画面を使用します。

[ImportMany(typeof(IWidget), AllowRecomposition = true)]
        public IEnumerable<ExportFactory<IWidget, IWidgetMetadata>> _widgets { get; set; }

<ContentControl x:Name="Navigator" cal:View.Model="{Binding Navigator}"/>

プロパティ "Navigator" が呼び出され、最初のインスタンスではビューが見つかりません。しかし、それが 2 回目に呼び出され、ビューが検出されます。ウィジェットのビューモデルにビューがアタッチされている (OnViewAttached が呼び出されている) (ViewAware クラス) ことがわかります。ただし、最後には表示されません。また、「OnViewLoaded」が呼び出されることはなく、ビューが「ビューが見つかりませんでした...」ということも認識しています。問題はどこだ?

同様のプロトタイプ アプリを使用して、問題を引き起こす Widgets プロジェクトを追加しましたが、Navigator プロパティはここで 1 回だけ呼び出されます。出力は同じですが、ビューが見つかりません。

リンク

2) もう 1 つの問題は、"cal:View.Context" がモジュールで機能していないように見えるため、View フォルダー内のサブフォルダーが解決されていないように見えることです。

/パトリック

4

1 に答える 1

1

AssemblySourceCM は、そのレジストリを使用して一致するビュー候補を探します。既定では、すべての種類のスタートアップ アセンブリが含まれています。

あなたの場合のように、アセンブリは疎結合で動的にロードされるため、CM がアセンブリを見つけられない可能性が非常に高くなります。

AssemblySource.Instance.Add(yourAssembly);アセンブリがロードされたらすぐに試してください。これで問題が解決するはずです。

ところで:なぜあなたの例で規約ベース明示的な CM ViewModel バインディングを使用するのですか?

于 2013-03-12T21:27:05.027 に答える