c# - Updating collection of items in WPF usercontrol while itemsource updated -


i have custom wpf usercontrol collection of objects.

public class myusercontrol : usercontrol { public readonly static dependencyproperty pointssourceproperty = dependencyproperty.register("pointssource", typeof(ienumerable), typeof(myusercontrol), new frameworkpropertymetadata(null, onpointssourcechanged)); public ienumerable pointssource { { return getvalue(pointssourceproperty) ienumerable; } set { setvalue(pointssourceproperty, value); } } private observablecollection<datapoint> _points = new observablecollection<datapoint>(); public observablecollection<datapoint> points { { return points; } } private static void onpointssourcechanged(dependencyobject d, dependencypropertychangedeventargs e) { // expect update points collection } 

}

public class datapoint : dependencyobject { public readonly static dependencyproperty timeproperty = dependencyproperty.register("time", typeof(datetime), typeof(datapoint)); public readonly static dependencyproperty valueproperty = dependencyproperty.register("value", typeof(double), typeof(datapoint)); public datetime time { { return (datetime)getvalue(datetimeproperty); } set { setvalue(datetimeproperty, value); } } public double value { { return (double)getvalue(valueproperty); } set { setvalue(valueproperty, value); } } } 

i define control data observable collection in view model:

<my:myusercontrol pointssource="{binding data}"> <my:myusercontrol.points> <my:point time="{binding timeutc}" value="{binding value}" /> </my:myusercontrol.points> </my:myusercontrol> 

how can update points collection while pointssource value changed?

try this:

private static void onpointssourcechanged(dependencyobject d, dependencypropertychangedeventargs e) { myusercontrol control = d myusercontrol; // have replace viewmodelitemclass name of class t // in observablecollection<t> property data in viewmodel var sourcecollection = e.newvalue ienumerable<viewmodelitemclass>; control._points.clear(); foreach (var item in sourcecollection) { control._points.add(new datapoint { time = item.timeutc, value = item.value }); } } 

Comments

Popular posts from this blog

javascript - backbone.js Collection.add() doesn't `construct` (`initialize`) an object -

php - Get uncommon values from two or more arrays -

Adding duplicate array rows in Php -