c# - Expose boolean property in list of of objects to a WPF Checkbox -


i have working wpf mvvm app. i'm attempting expose list of mappable objects called targets. targets populated after app start. , exposed via viewmodel set targetfilter usercontrol data context. in targetfilter control listbox expose bool property called showonmap. able expose data via dictionary, clunky , not way turn targets on off. plus hacky , breaks databinding of mvvm.

public class target {     public int index { get; set; }     public int targetid { get; set; }     public targetlocation lastlocation { get; set; }     //lastlocation contains lat long etc.     public string name { get; set}     public bool showonmap { get; set; } } 

on user session object have observablecollection:

public observablecollection<target> targetcache; 

i have view model exposes data

public class mapviewmodel : viewmodelbase {    private serversession _serversession;      public observablecollection<target> gettargetcache     {                 {             //if (_serversession.user.targetcache != null)             //{                 return _serversession.user.targetcache;             //}             //return new observablecollection<target>();         }         set         {             _serversession.user.targetcache = value;         }     }      // key value pari of targetid, targetname     public dictionary<string, string> getalltargetdictionary     {                 {             return _serversession.user.alltargetdictionary;         }     }   // more code 

}

this view model attached settings user control has number of child user controls

    public partial class settings : usercontrol {     private mapviewmodel _mapviewmodel;      public event eventhandler dismissrequested;      public settings()     {         initializecomponent();     }     public settings(mapviewmodel mapviewmodel)     {         initializecomponent();         _mapviewmodel = mapviewmodel;           targetfilter targetfilter = new targetfilter(_mapviewmodel.serversession);         targetfilter.datacontext = _mapviewmodel;         targetfilter.dismissrequestedtargetlist += new eventhandler(handleeventhideusercontrol);          targetfiltertab.content = targetfilter; 

my xaml trying show combo box , check box list of targets.

i have combo box working , bind dictionary, can't bind list:

      <stackpanel grid.row="0">          <grid>             <grid.columndefinitions>                 <columndefinition width="*" />                 <columndefinition width="*" />                 <columndefinition width="*" />                 <columndefinition width="*" />             </grid.columndefinitions>             <label grid.column="0" content="targets" fontweight="bold" />             <label grid.column="1" name="targetlist" horizontalcontentalignment="right" />         </grid>         <textblock grid.column="0" verticalalignment="center" fontsize="14" margin="15,0,10,0">select case</textblock>         <separator margin="10" />         <combobox grid.column="1" itemssource="{binding path=getcasedictionary}"                displaymemberpath="value" selectedvaluepath="key"                selectedvalue="{binding path=selectcase}" selectionchanged="combobox_selectionchanged" name="casedropdown" />           <textblock grid.column="0" verticalalignment="center" fontsize="14" margin="15,0,10,0">dispaly targets bind on dictionary</textblock>         <separator margin="10" />         <listbox itemssource="{binding path=getalltargetdictionary}">             <listbox.itemtemplate>                 <datatemplate>                     <!--<checkbox ischecked="{binding showonmap, mode = twoway}" click="checkbox_click" name="value" >                     </checkbox>-->                     <checkbox content="{binding value}"                  ischecked="{binding path=key, mode=oneway}" click="checkbox_click"/>                 </datatemplate>             </listbox.itemtemplate>         </listbox>          <textblock grid.column="0" verticalalignment="center" fontsize="14" margin="15,0,10,0">display targets bind on target cache</textblock>         <separator margin="10" />         <listbox itemssource="{binding path=gettargetcache}" name="lbtargets">             <listbox.itemtemplate>                 <datatemplate>                     <!--<checkbox ischecked="{binding showonmap, mode = twoway}" click="checkbox_click" name="value" >                     </checkbox>-->                     <checkbox content="{binding name}"                  ischecked="{binding showonmap}" click="checkbox_click"/>                 </datatemplate>             </listbox.itemtemplate>         </listbox>       </stackpanel> 

here link looks no binding on final list box tab control image http://imgur.com/wr4lo1b

none of data present @ binding, , created , accessed later. why binding work dictionary not list? ideas make list bind?

thank you

i not see change notification on setter of viewmodels gettargetcache property. think app not pick change / assignment of property @ runtime. have method raise change notification (inotifypropertychanged) in base class viewmodelbase can call? like

onpropertychanged("gettargetcache") 


besides, sure binding first list box correct? can see first listbox uses getalltargetdictionary property on view model, of type dictionary<string, string>. means binding

 ischecked="{binding path=key, mode=oneway}" 

refers key of dictionary, string.

but Ìschecked bool....

have taken in debug window @ runtime? search binding error messsages there.


in addition recommend remove "get" prefix on properties, sounds method.


Comments

Popular posts from this blog

OpenCV OpenCL: Convert Mat to Bitmap in JNI Layer for Android -

android - org.xmlpull.v1.XmlPullParserException: expected: START_TAG {http://schemas.xmlsoap.org/soap/envelope/}Envelope -

python - How to remove the Xframe Options header in django? -