c# - WPF Binding data from two controls -
im trying bind custom property 1 control another, here code:
first, custom treeviewcontrol
public partial class itemtreecontrol : usercontrol { readonly itemtreeviewmodel itemtreeviewmodel; public static readonly dependencyproperty selecteditemproperty = dependencyproperty.register("selecteditem", typeof(item), typeof(itemtreecontrol), new propertymetadata(default(item))); public item selecteditem { { return (item)getvalue(selecteditemproperty); } set { setvalue(selecteditemproperty, value); } } }
here goes custom control displaying details:
public partial class itemdetailcontrol : usercontrol { public static readonly dependencyproperty detailitemproperty = dependencyproperty.register("detailitem", typeof(item), typeof(itemdetailcontrol), new propertymetadata(default(item))); public item detailitem { { return (item)getvalue(detailitemproperty); } set { setvalue(detailitemproperty, value); } } }
now xaml code binding:
<stackpanel> <itemtreecontrol x:name="itemtreecontrol"/> <itemdetailcontrol detailitem="{binding elementname=itemtreecontrol, path=selecteditem, mode=twoway}"/> </stackpanel>
now, if new value arrives @ itemtreecontrol.selecteditem
, value in itemdetailcontrol.detailitem
dont change. why?
updated.
code-behind in itemtreecontrol
:
private void mytreeview_selecteditemchanged(object sender, routedpropertychangedeventargs<object> e) { if (e.newvalue itemviewmodel) { selecteditem = (e.newvalue itemviewmodel).item; } else { selecteditem = null; } }
in general ui controls not bind each other's properties. selecteditem
ideal kept @ viewmodel level. if have vm underlying these controls, should bind both these controls vm-level property.
also note detail control doesn't change selecteditem, binding should not twoway
.
Comments
Post a Comment