一个ViewModel的两个并发视图

时间:2014-09-08 21:44:42

标签: c# wpf mvvm

我通过其他帖子阅读混合答案,但我说我有一个主要的ViewModel,它处理两个相关的数据模型

public partial class Product
{
    public string ProductName { get; set; }
    public int TemplateID { get; set; }
    public virtual Template Template { get; set; }
}

public Template()
{
    this.Products = new ObservableCollection<Product>();
}
public int TemplateID { get; set; }
public string TemplateName { get; set; }
public virtual ObservableCollection<Product> Products { get; set; }
}

目前,有两个单独的视图和视图模型,一个显示所有数据&#34; byTemplates&#34;另一个显示所有数据&#34; byProducts&#34;。两者都允许CRUD操作。为了摆脱重复的代码和命令,我想将这两个视图合并为一个。

我还需要两个ViewModel吗?我可以同时处理相同的数据实例吗? (所以,如果我在&#34; ByTemplates&#34;视图下插入一些内容,并切换到&#34; ByProducts&#34;在保存到数据库之前,我仍然会看到我所有的更改?

编辑:

我目前正在使用标签来促进这一点。 我的观点如下:

按产品标签 ByProduct View

按模板标签(用户可以选择模板,&#34;关联产品&#34; ListView将显示链接到&#34;模板&#34;)的所有产品 ByTemplate View

2 个答案:

答案 0 :(得分:0)

您所说的几乎是可能的,viewmodel可以包含多个模型,这些模型组合在一起充当一个父视图模型,并且可以查看它有兴趣绑定的所有属性。            有两个不同的视图是设计讨论,但它不是强制性的。每个模型都不需要一个viewmodel。拥有视图模型的目的是消除对特定业务模型的直接依赖,并根据UI需求合并和模拟数据。所以是的,你可以做你想做的事。             如果你想深入了解怎么做,请分享详细的xaml和现有的model / viewmodel,否则你就完成了。

答案 1 :(得分:0)

我倾向于使用单个视图模型,其中两个视图都是互连的。一个例子可能是相同数据的详细信息和摘要视图。

在您描述的场景中,如果两个视图都在利用相同的数据和方法,那么请将它们保留为一个视图模型。但是,如果您正在对每个命令进行参数化以处理子集,那么听起来好像分离会更好 - 我希望通过对公共元素进行基类化来改进重用和维护,然后扩展到每个子集的特定视图模型。这也可以在以后提供更好的扩展。