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
Post a Comment