据我所知,ViewModel通过数据绑定与View进行通信。但是如何在ViewModel UIElements for View中创建。
感谢。
答案 0 :(得分:6)
ViewModel不应直接创建任何UIElements,因为ViewModel不应该依赖于View。 ViewModel提供View(即UIElements)可以绑定的数据。
如果您的问题是针对如何引导View,则有两种方法:View-first和ViewModel-first。在前者中,首先创建View,然后创建ViewModel并绑定它。在后者中,您可以使ViewModel创建View(通过接口)。阅读更多相关信息here。
如果您的问题是针对编写UIElements的视图,则可以通过DataBinding以及DataTemplates和ControlTemplates的使用来完成。
答案 1 :(得分:2)
MVVM是一种松散的设计模式,只要纯粹关注UI,就可以将代码放在代码中,只需记住单元测试可能更难。
严格来说,ViewModel不与View通信,ViewModel中没有View的引用,而是View从ViewModel读取数据并在ViewModel上执行命令。
答案 2 :(得分:0)
问题是我看到的动态组件创建需求。
您可以在视图上放置Container对象,然后在modelView上创建UIElements并将此UIElement集合绑定到Container的内容属性。但我认为这不是一个好习惯。这种方法打破了模型和视图的分离。因此,您需要避免动态组件创建。
MVVM方法有点不同。有时强迫我们使用技巧。即,不是使用ListBox的MemberPath属性,而是定义ItemTemplate并将ButtonBase元素放在模板上以支持命令!或者你扩展ListBox和支持命令。
我的提议而不是动态对象创建。使用DataTemplates并更改ModelView上的绑定成员,然后将自动为您创建视图。对于复杂的senario,它可能很难。为了保持MVVM结构,我们都是这样做的。