c# - Binding MenuItem's IsChecked to TabItem's isSelected -
basically facing same problem describled @ binding menuitem's ischecked tabitem's isselected dynamic tabs customed tabcontrol have own viewmodel, had menu binds same source. happened binding menuitem
's ischecked
isselected
did not work more. i thought isselected can not found there's no such property in viewmodel
<setter property="ischecked" value="{binding isselected, mode=twoway}" />
i tried utilize solution suggested build list of tabitem
error unable cast object of type tabdata type tabitem
. below xaml , converter. thought fails because during construction tabcontrol.items
homecoming viewmodel instance instead of uicontrol tabitem
; suggestions how binding here?
xaml
<menu background="transparent"> <menuitem style="{staticresource tabmenubuttonstyle}" itemssource="{binding relativesource= {relativesource findancestor, ancestortype={x:type tabcontrol}}, path=items,mode=oneway,notifyonsourceupdated=true,converter={staticresource tabcontrolitemconverter}}" itemcontainerstyle="{staticresource tabmenuitemxxx}"> </menuitem> </menu>
c#
public object convert(object value, type targettype, object parameter, system.globalization.cultureinfo culture) { itemcollection ic = (itemcollection)value; list<tabitem> tabitems = new list<tabitem>(); foreach (var obj in ic) { tabitems.add((tabitem)obj); } homecoming tabitems; }
here changes bases on provided project
remove next binding, not required
,mode=oneway,notifyonsourceupdated=true,converter={staticresource tabcontrolitemconverter}
modify setter in style tabmenuitemxxx
from
<setter property="ischecked" value="{binding path=isselected, mode=twoway, relativesource={relativesource ancestortype=tabitem}}" />
to
<setter property="ischecked" value="{binding path=isselected, mode=twoway/>
add next setter in style targettype="{x:type tabitem}"
<setter property="isselected" value="{binding isselected}" />
modify tabdata
class follows
public class tabdata : inotifypropertychanged { private bool isselected; public string header { get; set; } public object content { get; set; } public bool isenabled { get; set; } public bool isselected { { homecoming isselected; } set { if (viewmodel.currentitem.isselected && viewmodel.currentitem != this) { viewmodel.currentitem.isselected = false; } isselected = value; raisepropertychanged("isselected"); if (viewmodel.currentitem != this) viewmodel.currentitem = this; } } public event propertychangedeventhandler propertychanged; public void raisepropertychanged(string propertyname) { propertychangedeventhandler handler = propertychanged; if (handler != null) handler(this, new propertychangedeventargs(propertyname)); } }
this need alter in project sync menu items's checked tab item's selected.
for sec issue closing tab item, can prepare changing close button's
commandparameter="{binding selecteditem,elementname=tabcontrol}"
to
commandparameter="{binding}"
sample project tabcontrolsyncwithmenuitems.zip
let me know results.
c# wpf xaml menuitem tabitem
No comments:
Post a Comment