3

如果我有一个模型应该包含一个集合,例如 book -> authors

我是怎么做到的

像:

public class Book
{
    public string Title { get; set; }
    public List<Author> Authors { get; set; }
}

或者更像:

public class Book
{
    public string Title { get; set; }
    public List<AuthorViewModel> Authors { get; set; }
}

这两者中哪一个是更常见的方法,我如何从 ViewModel 中获取视图?

4

3 回答 3

4

这个肯定是错的:

public class Book
{
    public string Title { get; set; }
    public List<AuthorViewModel> Authors { get; set; }
}

但这没关系:

public class BookViewModel
{
    public string Title { get; set; }
    public List<AuthorViewModel> AuthorModels { get; set; }
}
于 2012-10-22T17:10:55.567 回答
1

根据 MV-VM,低层不应该知道高层。View 知道 ViewModel 和数据绑定到它的属性。ViewModel 知道模型(并公开与其相关的属性),但不知道 View。

同样,Model 也不知道 ViewModel。因此,aBook拥有Authors,而 aBookViewModel可以知道Books、Authors,甚至可以(通过中介)调用AuthorViewModels。但是aBook根本不应该知道任何ViewModel事情。

hth

于 2012-10-22T11:48:48.467 回答
0

这取决于您的模型是否包含足以呈现视图的属性。如果您需要使用特定于视图的代码来扩充它们,并且您不想用这些附加属性污染您的模型,那么您将创建一个视图模型。

如果您愿意,您可以将模型 ( Book) 公开为视图模型 ( BookViewModel) 的属性,尽管纯粹主义者会说您应该创建一个包装器属性,该属性代表每个模型属性的模型。

我不确定“如何从视图模型中获取视图”是什么意思,但是如果您使用的是 MVVM 设计模式,那么您应该使用 MVVM 框架。以Caliburn.Micro为例,如果您首先使用视图模型,那么您将实例化您的视图模型并使用 Caliburn.Micro 定位视图并将两者绑定在一起。

于 2012-10-22T11:43:33.263 回答