Caliburn Micro Winforms MEF实施

Caliburn Micro Winforms MEF实施

问题描述:

我的名字是Max。我目前正在研究caliburn micro的项目。 我想在MEF的帮助下在C#中创建一个基于插件的应用程序。Caliburn Micro Winforms MEF实施

我正在使用WPF。所以我把我的应用程序剥离到最低限度。与caliburn的绑定在测试WPF应用程序中正常工作。现在的问题是,ShellView(WPF UserControl)需要存在于WinForm第三方应用程序的ElementHost中。

我无法弄清楚如何创建正确的绑定。这样caliburn的“魔力”也可以在winform应用程序中运行。也许你们中的一个可以帮助我。我搜索了一整天,并尝试了这一点。

您的帮助将非常感激。 电贺最大

链接到项目:这是设在CM GitHub的 https://www.dropbox.com/s/y88kgnh0wscy2jr/CaliburnMEF_Example.zip?dl=0

+0

请在邮件中包含代码和错误消息。并提供一个突出显示问题的最低可重复性示例。 – sanastasiadis

+0

你好@sanastasiadis谢谢你的回复。该项目已连接(Dropbox链接)。 我没有收到任何错误。我的viewmodels只是不显示在我的测试TabControl中。在Wpf应用程序中一切都很好。 –

+0

如果您的代码有复制粘贴的关键部分,您的问题可能会吸引更多的答案。保留下载链接作为补充参考。 – sanastasiadis

样品其一直存在一段时间...,https://github.com/Caliburn-Micro/Caliburn.Micro/tree/master/samples/Caliburn.Micro.WinFormsInterop/Caliburn.Micro.WinFormsInterop

- 编辑 - 你是比较接近这代码片段到您当前的测试项目。你失踪了几个关键项...参考意见

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

解决方案根据您的项目进行小小的调整双重检查MonoMax DLL位置SelectedAssemblies覆盖https://1drv.ms/u/s!Av7IfcJRK0fJxKozhsVP2s4hDOq-LQ – mvermef