【问题标题】:Caliburn Micro Winforms MEF ImplementationCaliburn Micro Winforms MEF 实施
【发布时间】:2016-11-11 17:05:21
【问题描述】:

我叫马克斯。我目前正在使用 caliburn micro 进行项目。 我正在尝试借助 MEF 在 C# 中创建一个基于插件的应用程序。

我正在使用 WPF。所以我将我的应用程序剥离到最低限度。与 caliburn 的绑定在测试 WPF 应用程序中运行良好。我现在遇到的问题是 ShellView (WPF UserControl) 需要存在于 WinForm 3rd 方应用程序的 ElementHost 中。

我不知道如何创建正确的绑定。这样 caliburn 的“魔力”也可以在 winform 应用程序中发挥作用。也许你们中的一个裂缝可以帮助我。我用谷歌搜索并尝试了一整天。

非常感谢您的帮助。 迎接麦克斯

项目链接: https://www.dropbox.com/s/y88kgnh0wscy2jr/CaliburnMEF_Example.zip?dl=0

【问题讨论】:

  • 请在帖子中包含代码和错误消息。并提供一个突出问题的最小可重现示例。
  • 您好@sanastasiadis 感谢您的回复。该项目已附加(Dropbox 链接)。我没有收到任何错误。我的视图模型只是没有出现在我的测试 TabControl 中。在 Wpf 应用程序中一切正常。
  • 如果您的问题复制粘贴了代码的关键部分,它可能会吸引更多答案。保留下载链接作为补充参考。

标签: c# .net wpf winforms caliburn.micro


【解决方案1】:

CM GitHub 上提供的示例已经有一段时间了...https://github.com/Caliburn-Micro/Caliburn.Micro/tree/master/samples/Caliburn.Micro.WinFormsInterop/Caliburn.Micro.WinFormsInterop

--编辑-- 您将此代码 sn-p 与您当前的测试项目进行了密切比较。您遗漏了一些关键项目...参考 cmets

 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 控件一起使用。至于绑定它应该按预期工作。如果您在绑定其他控件(第 3 方)时遇到问题,您可能需要创建约定来支持它们。这非常依赖于控件本身。

【讨论】:

猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-16
  • 1970-01-01
  • 1970-01-01
  • 2012-01-29
  • 2012-10-24
  • 2012-05-08
相关资源
最近更新 更多