DbContext またはそのプロパティのいずれかに直接バインドすることは、MVVM の背後にある考え方に違反するビューにモデルを公開するため、悪い考えです。(View は ViewModel を認識し、ViewModel は Model を認識します)。
マスター/ディテール シナリオでは、それぞれが異なる役割を持っているため、それぞれ 2 つの異なるビューを持つ 2 つの異なるビューモデルがあります。
- マスターの役割は、選択肢のリストとその詳細に移動する方法を提示することです。
- 一方、詳細の役割は、おそらく値を変更する方法を使用して、単一の要素を提示することです。
データ モデルとして製品のリストがあり、各製品には 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 の役割はProducts
、ProductRepository モデルのリストを公開し、詳細ビューに切り替える方法を提供することです。
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
}