直接绑定到DbContext或其任何属性将是一个坏主意,因为它会将Model暴露给View,这违反了MVVM背后的想法。 (视图知道ViewModel,ViewModel知道模型)。
在主细节场景中,您有两个不同的视图模型,每个视图模型有两个不同的视图,因为它们每个都有不同的角色。
- 硕士的作用是呈现选择列表和导航到他们的细节的方法。
- 细节的作用另一方面是呈现一个单一的元素,可能有一种方法来改变值。
想象一下,你有产品的列表,你的数据模型,每个产品都有一个ID,名称和价格:
class Product {
public int Id { get; set; }
public string Name { get; set; }
public int Price { get; set; }
}
你也有某种数据模型包含的列表产品:
class ProductRepository {
private List<Product> products = new List<Product>();
public List<Product> Products
{
get { return this.prodcuts; }
}
}
然后你MasterViewModel的作用是公开ProductRepository模型的Products
列表,并提供一种方式切换到详细信息视图:
class ProductsViewModel {
private ProductRepositry productsModel = new ProductRepository();
private ObservableCollection<Product> products = new ObservableCollection<Product>(productsModel.Products);
public ObservableCollection<Product> Products
{
get { return this.products; }
}
public ProductViewModel Detail { get... private set... } // setter includes PropertyChange
public ICommand ViewDetail { get... }
public void ViewDetail(Product detail)
{
this.Detail = new ProductViewModel(detail);
}
}
的ProductViewModel
的唯一责任是提供一个Product
:即通过
class ProductViewModel {
public string Name { get... set... } // Again a PropertyChange would be necessary for propert binding
public int Price { get... set... } // dito
}
EF的。当地财产是一个ObservableCollection,我提供了一些起点集合,我的虚拟机获得的我的视图连接到我的虚拟机中的一些ObsvCol,然后为详细视图,我使用虚拟机的ObsvCol中的对象的导航属性。这是问题的一部分,EF的大部分信息都是针对无状态设计的Web,而提供的.Local属性MS使用长寿DbContexts让位于桌面上的有状态设计。生活,学习和重新考虑;) – GetFuzzy 2012-12-22 07:39:03