首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >ViewModels在现有模型对象之上的视图的实证性

ViewModels在现有模型对象之上的视图的实证性
EN

Stack Overflow用户
提问于 2013-05-29 09:07:59
回答 1查看 123关注 0票数 2

我正在进行一个项目,在这个项目中,我试图实现MVVM,以正确地将业务逻辑与视图分离开来。尽管我阅读了很多关于这个模式的论文,并且看了示例应用程序,但我仍然有一些未回答的问题。

我的模型由一组Documents组成,其中包含不同类型的DocumentObjects列表。

DocumentObjects包含计算逻辑,彼此之间以及与Document之间具有交互作用。

然后我就有了我的观点和ViewModels ( Document和每种DocumentObjects各一种)

为了在正确的MVVM模式中实现这一点,我将使我的DocumentView显示DocumentObjects列表(例如,使用ItemsControl )。然后,WPF将选择通过DataTemplate条目使用的正确视图。

这种方法的问题在于,我希望在我的Document中保留一个实际DocumentObjects的列表,而不是它们的视图模型。然后,如果我使用DataTemplate来描述对象使用的视图,我就无法指定我希望使用的视图模型.

我的问题是:我如何在现有模型对象之上构建"VVM“部分,而不让它们知道呢?或者更实际地说,您将如何更改此设计模式以符合MVVM准则?

(我想要的是一种“模型优先”实例化。)

是一个示例应用程序,它提出了我的问题: In 里德·科普西关于MVVM的博客文章

代码语言:javascript
复制
<DataTemplate DataType="{x:Type model:FeedItem}">
    <TextBlock Text="{Binding Path=Title}" />
</DataTemplate>

FeedItem模型由视图使用DataTemplate直接使用。如果FeedItem必须有一个ViewModel,怎么做呢?

(我知道我的设计可能不是最好的,我愿意听取建议!)

EN

回答 1

Stack Overflow用户

发布于 2013-05-29 09:41:13

我没有完全理解你的问题,但听起来你想要用一些附加的属性来增加一个模型,这就是视图模型的作用所在。

例如,您可能有一个Document模型,它有一个Item集合

代码语言:javascript
复制
public class Document
{
    public List<Item> Items { get; set; }
}

您希望使用一些不在Item类型上的附加属性来呈现视图中的每个项。您不希望使用这些与视图相关的附加属性来污染您的Item模型,因此您可以创建一个ItemViewModel。然后您通常会创建一个DocumentViewModel来保存这个集合:

代码语言:javascript
复制
public class DocumentViewModel
{
    public List<ItemViewModel> ItemViewModels { get; set; }
}

然后,视图将绑定到DocumentViewModel的一个实例。显然,需要一些管道代码来将数据传输到DocumentDocumentViewModel类型。您可以使用像AutoMapper这样的库来帮助这一点。

当然,您可以决定您的Document类型已经包含了所有必需的属性,并且希望将它直接公开到您的视图中。这是and和LoD原则之间的平衡,所以您必须考虑这一点。

不过,最重要的是如果正在执行MVVM,则需要使用MVVM框架。这对视图组合也有很大帮助。例如,使用Caliburn.Micro,约定假定绑定到的任何集合都是视图模型的集合,它将自动定位相应的视图并将两者绑定在一起。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/16809789

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档