wpf - bindable property for checkbox ischecked do not reflect when trigger used -


my bindable property revalsurfacechecked not updated when set ischecked property in trigger

<checkbox grid.row="1" grid.column="2" grid.columnspan="2" x:name="chkrevalsurface" content="export reval surface (if applicable)"                    horizontalalignment="left" verticalalignment="center">             <checkbox.isenabled>                 <multibinding converter="{staticresource revalsurfacecheckboxenableconverter}">                     <binding elementname="chkexporttocsv" path="ischecked"></binding>                     <binding elementname="chkexporttoexcel" path="ischecked"></binding>                 </multibinding>             </checkbox.isenabled>             <checkbox.style>                 <style targettype="{x:type checkbox}">                     <setter property="ischecked" value="{binding revalsurfacechecked}" />                     <style.triggers>                         <trigger property="isenabled" value="false">                             <setter property="ischecked" value="false"></setter>                         </trigger>                     </style.triggers>                 </style>             </checkbox.style>         </checkbox> 

the logic here if check of 2 checkbox, chkrevalsurface should enabled else stay disabled-written in converter. when chkrevalsurface disabled should set unchecked (written in trigger) , revalsurfacechecked property should set false. if checked set true in viewmodel.

butrevalsurfacecheckedis not set true or false.

the problem <setter property="ischecked" value="false"></setter> clears original binding, checkbox's ischecked property ends being false without changing underlying property.

you mentioned have viewmodel, assume chkexporttocsv , chkexporttoexcel checkboxes bound property in viewmodel.

lets assume viewmodel:

public class mainwindowviewmodel : inotifypropertychanged {     private bool _revalsurfacechecked;     public bool revalsurfacechecked     {         { return _revalsurfacechecked; }         set         {             _revalsurfacechecked = value;             onpropertychanged();         }     }      private bool _ischkexporttocsvchecked;     public bool ischkexporttocsvchecked     {         { return _ischkexporttocsvchecked; }         set         {             _ischkexporttocsvchecked = value;             revalsurfacechecked = revalsurfacechecked && (_ischkexporttocsvchecked || _ischkexporttoexcelchecked);             onpropertychanged();         }     }      private bool _ischkexporttoexcelchecked;     public bool ischkexporttoexcelchecked     {         { return _ischkexporttoexcelchecked; }         set         {             _ischkexporttoexcelchecked = value;             revalsurfacechecked = revalsurfacechecked && (_ischkexporttocsvchecked || _ischkexporttoexcelchecked);             onpropertychanged();         }     }      public event propertychangedeventhandler propertychanged;      private void onpropertychanged([callermembername] string propertyname = null)     {         if (propertychanged != null)         {             propertychanged.invoke(this, new propertychangedeventargs(propertyname));         }     } } 

and xaml:

<checkbox x:name="chkexporttocsv" content="chkexporttocsv" ischecked="{binding ischkexporttocsvchecked}"           horizontalalignment="left" verticalalignment="center" />  <checkbox x:name="chkexporttoexcel" content="chkexporttoexcel" ischecked="{binding ischkexporttoexcelchecked}"           horizontalalignment="left" verticalalignment="center" />  <checkbox x:name="chkrevalsurface" content="export reval surface (if applicable)"            horizontalalignment="left" verticalalignment="center"            ischecked="{binding revalsurfacechecked}">     <checkbox.isenabled>         <multibinding converter="{staticresource anytrueconverter}">             <binding elementname="chkexporttocsv" path="ischecked"></binding>             <binding elementname="chkexporttoexcel" path="ischecked"></binding>         </multibinding>     </checkbox.isenabled> </checkbox> 

i'm binding chkexporttocsv's ischecked property ischkexporttocsvchecked property in viewmodel , chkexporttoexcel's ischecked ischkexporttoexcelchecked property.

i removed style chkrevalsurface , isenabled use converter gives true if of inputs true. assume revalsurfacecheckboxenableconverter same, i'll include here:

public class anytrueconverter : imultivalueconverter {     public object convert(object[] values, type targettype, object parameter, cultureinfo culture)     {         return values != null && values.oftype<bool>().any(b => b);     }      public object[] convertback(object value, type[] targettypes, object parameter, cultureinfo culture)     {         throw new notimplementedexception();     } } 

the trick in setter of ischkexporttocsvchecked , ischkexporttoexcelchecked:

revalsurfacechecked = revalsurfacechecked && (_ischkexporttocsvchecked || _ischkexporttoexcelchecked); 

we moved logic datatrigger here. should solve problem. tested , works me.


Comments

Popular posts from this blog

gridview - Yii2 DataPorivider $totalSum for a column -

java - Suppress Jboss version details from HTTP error response -

Sass watch command compiles .scss files before full sftp upload -