0

PRISM アーキテクチャに WPF アプリケーションがあります。

内部に 2 つのユーザー コントロールを持つユーザー コントロール (ビュー) があります。

これがアイデアです: ここにアイデアがあります:

「検索ユーザー コントロール」が独自のユーザー コントロールにある理由は、アプリケーションで再利用する予定があるためです。

メインのユーザー コントロール () は「MainView」と呼ばれ、2 つのユーザー コントロールがあります。結果を表示するグリッド

これらのユーザー コントロール (および親の「メイン ビュー」) はそれぞれ「ビュー」であり、「ビュー モデル」があります。

「子」ユーザーコントロールが独自の「ビューモデル」を自動的に作成しないという事実を除いて、すべてが正常に表示されます。

ビューモデルのクラスには「エクスポート」属性があり、ビューの分離コードには次のスニペットがあります。

[Import]
FilterFieldsViewModel ViewModel
{           
    set
    {
       this.DataContext = value;
    }
}

「View-Model」の設定は Main View」では行われますが、子ビューでは行われません...

「検索ユーザー コントロール」の「検索」ボタンにコマンドをバインドしました。アプリケーションが読み込まれると、出力ウィンドウに次のようなエラーが表示されます。

BindingExpression パス エラー: 'SearchCommand' プロパティが 'object' ''MainWindowViewModel' (HashCode=22047425)' に見つかりません。BindingExpression:Path=SearchCommand; DataItem='MainWindowViewModel' (HashCode=22047425); ターゲット要素は「ボタン」(名前=「検索」); ターゲット プロパティは 'Command' (タイプ 'ICommand') です。

何らかの理由で、子ユーザー コントロールのビュー モデルがインスタンス化されていないため、「子」ユーザー コントロールからのコマンドがメイン ウィンドウのビュー モデルのビュー モデルにバインドしようとします。

どうしてこれなの ?

4

1 に答える 1

2

依存性注入コンテナー (MEF) は、サブビューにインポートを登録していMainViewません。これは、MEF ではなくによって作成されているためです。おそらくやりたいことは、あなたのにプロパティを作成することですMainViewModel:

[Import]
public FilterFieldsViewModel FilterFieldsViewModel {get; set; }

次に、XAML で:

<UserControl ....>
   ...
   <SearchUserControl DataContext="{Binding FilterFieldsViewModel}" ... />
   ...
</UserControl>

これにより、MEF が のインスタンスを作成し、FilterFieldsViewModelに送信できるようになりますSearchUserControl

もちろん、これは基本的な概念です。「SearchViewModelBase」またはFilterFieldsViewModel.

于 2012-07-26T08:18:00.743 に答える