【问题标题】:MVVM DataTemplate and non-empty view model constructorMVVM DataTemplate 和非空视图模型构造函数
【发布时间】:2011-07-06 00:22:43
【问题描述】:

我有以下数据模板:

    <DataTemplate DataType="{x:Type vm:MyViewModel}">
        <views:MyView/>
    </DataTemplate>

问题是,我的视图模型有一个构造函数,它接受由容器(统一)自动注入的参数。但是,为了让 DataTemplate 工作,MyViewModel 需要有一个无参数的构造函数。

如果我使用 DataTemplate 创建视图模型,还有其他方法可以将适当的值注入到视图模型中吗?

【问题讨论】:

  • 你有没有为这个问题开发过解决方案?

标签: c# mvvm datatemplate


【解决方案1】:

我认为 View 不应该创建 ViewModel。

ViewModels 应该创建其他 ViewModels,而 View 只是定义了如何绘制 ViewModel。

例如,ParentViewModel 可能有一个名为 ChildViewModel 的属性。 ParentView 将包含一个 ContentControl,其 Content 绑定到 ChildViewModel,并且 DataTemplate 将用于告诉应用程序将 ChildViewModel 绘制为 ChildView

话虽如此,您的 View 目前是如何创建您的 ViewModel 的?您始终可以将 DependencyProperties 添加到您的视图中,并使用这些属性在视图的加载事件中构建您的 ViewModel。

【讨论】:

  • 谢谢瑞秋。在我开始使用 DataTemplates 之前,视图模型通过构造函数(使用统一)注入到视图中。
  • @Rachel 您能否提供一个示例,说明如何使用DataTemplate 告诉应用程序将ChildViewModel 绘制为ChildView。这可以通过基于构造函数的依赖注入实现吗?
  • @Thomas 当然,您只需要在 XAML 中添加一个隐式 DataTemplate,就像这里的问题一样。我还有另一个例子here,或者只是在谷歌周围搜索“WPF Implicit DataTemplate”,你应该找到很多关于它的其他资源。
【解决方案2】:

您可能需要考虑使用 MVVM 框架,例如 Caliburn.Micro,并采用 ViewModel 优先的方法。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-06-01
    • 2015-06-05
    • 2010-12-07
    • 2012-08-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多