【问题标题】:How to bind View and ViewModel in design-time if ViewModel requires parameters如果 ViewModel 需要参数,如何在设计时绑定 View 和 ViewModel
【发布时间】:2016-05-22 13:53:05
【问题描述】:

我正在使用 Caliburn.Micro 框架。 在其documentation page 上据说:

您必须设置一个 Desinger-DataContext 并告诉 CM 在您的视图 XAML 中启用它的魔力:

 <Window 
    xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
    xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
    xmlns:vm="clr-namespace:CaliburnDesignTimeData.ViewModels"
    xmlns:cal="clr-namespace:Caliburn.Micro;assembly=Caliburn.Micro.Platform"
    mc:Ignorable="d" 
    d:DataContext="{d:DesignInstance Type=vm:MainPageViewModel, IsDesignTimeCreatable=True}"
    cal:Bind.AtDesignTime="True">

为此,ViewModel 必须具有默认构造函数。如果这不合适,您还可以在设计时使用 ViewModelLocator 创建 ViewModel。

我希望使用参数创建我的 ViewModel。如何使用 ViewModelLocator?

【问题讨论】:

    标签: wpf xaml mvvm caliburn.micro


    【解决方案1】:

    这是一篇关于 Caliburn.Micro 的设计时支持的好文章。 https://spin.atomicobject.com/2015/10/19/caliburn-micro-design-time/

    基本上,您使用 ViewModelLocator(实现并用作转换器)将 ViewModel 实例绑定到 d:DataContext,通过 Caliburn 的内置 SimpleContainer 实例化 ViewModel。这样您就可以使用容器设置依赖项,只需使用 IoC.Get() 创建视图模型的实例并在 IValueConverter.Convert() 方法中返回它。

    【讨论】:

    • 我已经找到了,谢谢。您认为在 ViewModel 项目中定义 IoC 是个好主意吗?
    • 在文章中,他实例化了一个新的 SimpleContainer 并将 IoC 的 GetInstance、GetAllInstances 和 BuildUp 泛型委托重新分配给新创建的 SimpleContainer 的匹配方法。如果您不想创建自定义 IoC,我相信您可以在 AppBootstrapper 上重用已设置的 IoC(因为它在 Initialize() 中执行此操作)。
    猜你喜欢
    • 2014-05-26
    • 2015-12-31
    • 1970-01-01
    • 1970-01-01
    • 2010-11-10
    • 1970-01-01
    • 2023-04-08
    • 1970-01-01
    • 2012-04-10
    相关资源
    最近更新 更多