【发布时间】:2013-01-03 15:33:31
【问题描述】:
针对指定问题的 WPF 的 MVVM 方法。我在 XAML 的“MainView”中有一个组合框。它的代码伙伴是“MainViewModel”,并公开了“Person”的属性,该属性基本上只是一个单独的类(POCO 类),用于公开一个字符串和一个 int 来表示数据库中的名称和种子。它设置了一个 ReadOnlyCollection 的属性,该属性绑定到一个组合框,如下所示:(引用 xaml 顶部的视图模型,如:xmlns:vm="clr-namespace:(mylocationforviewmodelnamespace))
ItemsSource="{Binding Path=People}"
DisplayMemberPath="FirstName"
SelectedValuePath="PersonId"
这很好用,但我正在设置一个用户控制视图及其各自的视图模型代码。我对 ViewModel 绑定方法没有了解的是如何绑定构造函数的传入值?或者你能做到吗?或者我应该为我的“模型”而是为“DataAccess”设置一个中间类?
我的最终目标是在组合框中选择一个值,该值已经正确绑定并且运行良好,并将其传递给视图模型代码,然后在构建时与视图关联并停靠在父窗体中。我可以很好地制作一个构造函数并设置一个静态值以在它构建时显示一个名称。我不知道您如何从组合框的父视图对象传递值,该组合框绑定到用户控件的结果创建。我准备做很多事情,但我真的想坚持使用 MVVM 方法,而不是在我已经知道如何执行此操作的代码中执行此操作。
我大致遵循的MVVM方法在这里:http://msdn.microsoft.com/en-us/magazine/dd419663.aspx
【问题讨论】:
-
> 如何为构造函数绑定传入的值?这个不清楚,VM构造函数、POCO构造函数还是控件的标签构造函数?
-
这本质上是我的问题。如何将传入的值从父 ViewModel 绑定到 UserControl(子)的 ViewModel 的构造函数?我愿意为父母使用中间代码传递给它,它构建并设置,孩子也可以绑定到它。
-
视图模型是在哪里创建的?当我在代码隐藏中创建视图模型并将其绑定到数据上下文时,这些值将被传入。
-
这也是我对 MVVM 方法感到困惑的原因。我总是假设在资源字典中,此过程与此类似:
-
可以通过这种方式或在后面的代码中创建对象。由于您有特殊需求,我会在后面的代码中创建它,并在创建后将其应用于数据上下文。我从事的 Silverlight/WPF 项目就是这样做的。如果视图的构造函数在其构造函数上创建 VM,则不会违反 MVVM。