【问题标题】:How to Dynamically load EXTERNAL MVVM and NON MVVM controls using Caliburn Micro如何使用 Caliburn Micro 动态加载外部 MVVM 和非 MVVM 控件
【发布时间】:2012-10-10 19:58:20
【问题描述】:

我正在从单独的 XAP 文件从 Web 服务器动态加载控件。创建实例后,我想在标签页中显示它们。控件可以是使用 CM 的 MMVM 控件,也可以是非 MVVM 标准控件。

在尝试使用我测试的选项卡之前,使用以下方法在页面上动态显示控件:

<ContentControl Name="TestControl" />

测试控件是 UserControl 类型的属性,通过创建动态加载控件的新实例来设置。现在这给了我一个错误,它找不到视图。如果是非 MVVM 控件当然没有视图,那么如何加载非 MVVM 控件呢?

我尝试将测试控件设为 MVVM 控件,但仍然出现无法加载视图错误。有意义,因为没有创建这样的实例。如果我在视图模型之外创建动态加载视图的实例,我如何“添加”它以便 CM 找到它?

最后但同样重要的是,如何将它绑定到 Silverlight 中的选项卡控件?这个想法是拥有一组用户控件(插件),每个控件都呈现在其单独的标签页中。

感谢您的帮助。

(我很快就完成了,没有使用 MVVM,仍然不确定 MVVM 是否值得所有复杂性)

【问题讨论】:

    标签: mvvm user-controls custom-controls caliburn.micro


    【解决方案1】:

    没有“mvvm 控制”之类的东西。 MVVM 只是一种模式而不是控制类型。基本上,在 Caliburn 中,您不需要直接使用 UserControls 或 Views,但如果您选择 ViewModel first 方法,Caliburn 框架应该能够为您找到匹配的视图。在您的情况下,由于您正在动态加载 XAP 文件,因此您需要将它们添加到 Caliburn 查找的程序集列表中以查找 View/ViewModel(并将它们绑定在一起),这是通过 IAssemblySource 接口完成的。根据文档here

    那么,AssemblySoure.Instance 是什么?这是那个地方 Caliburn.Micro 查找视图。您可以随时向其中添加程序集 在您的应用程序期间使它们可用于框架的时间, 但在 Bootstrapper 中也有一个特殊的地方可以做。

    【讨论】:

    • 我所说的 MVVM 控件是指具有 View 和 View Model 类的控件。标准控件显然没有这个,因此 cm 没有为我的控件找到任何视图。所以我需要工作的代码如下所示: MyControl myControl=Assembly.Load("SomeDynamicAssembly).GetType("CustomControl") as MyControl; Public MyControl CustomControl { get{return myControl}; }
    • 正如我所说,您需要通过容器或其他方式将加载的程序集添加到 IAssemblySource 并创建 ViewModel 而不是创建视图。如果您的程序集中有 View 和 ViewModel,CM 将拾取 View 并将其自动绑定到 ViewModel。
    • 你还是不明白问题动态加载的控件没有视图也没有视图模型。考虑您动态加载一个按钮并希望将其添加到 ContentControl,您如何做到这一点?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-06-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多