2016-11-11 28 views
0

私の名前はMaxです。私は現在、キャリバーンマイクロでプロジェクトに取り組んでいます。 私はMEFの助けを借りてC#でプラグインベースのアプリケーションを作成しようとしています。キャリバーンマイクロWinforms MEF実装

私はWPFを使用しています。だから私は最小限の私のアプリケーションを取り除いた。キャリバーンを使用したバインディングは、テストWPFアプリケーションで正常に動作します。私が今いる問題は、ShellView(WPF UserControl)がWinFormサードパーティアプリケーションのElementHostに存在する必要があることです。

正しいバインディングを作成する方法を理解できません。したがって、キャリバーンの「魔法」もwinformアプリケーションで機能します。たぶんあなたのうちの1人が私を助けることができます。私はグーグルでこれを一日中に試しました。

ご協力いただき誠にありがとうございます。 CM GitHubの上で提供されたサンプルは、そのが行われている間...、https://github.com/Caliburn-Micro/Caliburn.Micro/tree/master/samples/Caliburn.Micro.WinFormsInterop/Caliburn.Micro.WinFormsInterop

--edit-- あなたが近くにこれを比較して https://www.dropbox.com/s/y88kgnh0wscy2jr/CaliburnMEF_Example.zip?dl=0

+0

投稿に記載されているコードとエラーメッセージを含めてください。問題を明らかにする最小の再現可能な例を提供する。 – sanastasiadis

+0

こんにちは@anastasiadisご返信ありがとうございます。プロジェクトが添付されています(Dropboxリンク)。 私は何のエラーもありません。私のビューモデルは私のテストTabControlには表示されません。 Wpfアプリケーションではすべてが問題ありません。 –

+0

コードの重要な部分をコピーして貼り付けた方が、あなたの質問にはおそらく多くの回答が得られます。ダウンロードリンクを補足的な参照として保管してください。 – sanastasiadis

答えて

1

: は、プロジェクトへの最大

リンクに挨拶しますコードスニペットを現在のテストプロジェクトに追加します。あなたはいくつかの重要な項目を欠いていた...参照コメント

protected override void StartRuntime() 
{ 
     base.StartRuntime(); 

     var vm = IoC.Get<ShellViewModel>(); // ok 
     var view = ViewLocator.LocateForModel(vm, null, null); // needed 

     //binds the viewmodel to the view & wire up controls... 
     ViewModelBinder.Bind(vm, view, null); // required! 

     var activator = vm as IActivate; // required 

     if (activator != null) 
      activator.Activate(); // required 

     _host.Child = view; // since Forms is ViewFirst, by default. 

} 

ElementHostコントロールで動作させるにはちょっとしたステップが必要です。バインドに関しては、期待通りに動作するはずです。他のコントロール(第三者)とのバインドに問題がある場合は、それらをサポートするための規約を作成する必要があります。それはコントロール自体に非常に依存しています。

+0

あなたのプロジェクトに基づいて、マイナーな修正が加えられたソリューションをチェックします。SelectedAssembliesのMonoMax dllの位置は、https://1drv.ms/u/s!Av7IfcJRK0fJxKozhsVP2s4hDOq-LQ – mvermef

関連する問題