【发布时间】:2014-09-08 21:44:41
【问题描述】:
我在阅读其他帖子时得到了不同的答案,但我说我有一个主要的 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; }
}
目前,有两个独立的视图和视图模型,一个显示所有数据“byTemplates”,另一个显示所有数据“byProducts”。两者都允许 CRUD 操作。为了摆脱重复的代码和命令,我想将这两个视图合并为一个。
我还需要两个 ViewModel 吗?我可以同时处理同一个数据实例吗? (所以如果我在“ByTemplates”视图下插入一些东西,并在保存到数据库之前切换到“ByProducts”,我仍然会看到我所做的所有更改吗?
编辑:
我目前正在使用标签来促进这一点。 我的观点在这里:
按产品标签
通过模板选项卡(用户可以选择一个模板,“关联产品”列表视图将显示链接到“模板”的所有产品)
【问题讨论】:
-
您能否对视图的描述更准确一些?您的意思是它们具有相同的结构但不显示相同的数据?也许你可以建立一个
UserControl能够同时管理两者,但如果没有更多信息很难说。 -
所以我认为你可以在一个公共基类中重构两个 VM 的代码,比如
ProductTemplateViewModel,并保留 2 个 VM,每个视图一个,作为从它继承的类。至于视图本身,您可以使用UserControls 共享代码,但如果您只有一点点重复,这通常是不值得的。 -
我想我关心的是保持它已经拥有的方式(2VM),共享命令,我担心我创建了太多的数据库实例。但是很感谢您的意见-猜想我一直都做得很好;P