c# - MVVM ObservableCollection inside a ObservableCollection (ViewModel) -
i wondering how can have sub collection of parent collection?
for example,
i have observablecollection of products, adding , hen binding xaml correctly. however, need have observablecollection contains product items.
basically thinking in view model of having
productcollection[0].productitemcollection.add(newproductitem);
how go in mvvm?
thanks
chris
not sure if that's looking but...
let's have 2 grids in xaml. first shows porducts, second selected product's items.
<window x:class="wpfapplication1.mainwindow" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" title="mainwindow" height="350" width="525"> <grid> <grid.rowdefinitions> <rowdefinition height="173*" /> <rowdefinition height="147*" /> </grid.rowdefinitions> <datagrid itemssource="{binding productscollection}" selecteditem="{binding selectedproduct}" margin="10"> </datagrid> <datagrid itemssource="{binding productitemscollection}" margin="10" grid.row="1"> </datagrid> </grid>
you have classes declared
public class product { public product() { itemscollection = new observablecollection<item>(); } public int id { get; set; } public string name { get; set; } public observablecollection<item> itemscollection { get; set; } } public class item { public int id { get; set; } public datetime date { get; set; } }
selecting product first grid update second grid's itemsource in vm below
private observablecollection<product> _productscollection = new observablecollection<product>(); public observablecollection<product> productscollection { get{return _productscollection;} set { _productscollection = value; onpropertychanged("productscollection"); } } private observablecollection<item> _productitemscollection; public observablecollection<item> productitemscollection { {return _productitemscollection; } set { _productitemscollection = value; onpropertychanged("productitemscollection"); } } private product _selectedproduct = null; public product selectedproduct { {return _selectedproduct;} set { _selectedproduct = value; productitemscollection = _selectedproduct.itemscollection; onpropertychanged("selectedproduct"); } }
finally add sample data
public mainwindow() { initializecomponent(); this.datacontext = this; product product1 = new product() { id = 1, name = "product1" }; product1.itemscollection.add(new item() { id = 1, date = datetime.now}); product1.itemscollection.add(new item() { id = 2, date = datetime.now.adddays(-1) }); product product2 = new product() { id = 2, name = "product2" }; product2.itemscollection.add(new item() { id = 3, date = datetime.now }); product2.itemscollection.add(new item() { id = 4, date = datetime.now.adddays(-2) }); productscollection.add(product1); productscollection.add(product2); }
Comments
Post a Comment