c# - Specify target type for IValueConverter -


i have situation using multi-value converter. values passed being converted.

<menuitem>     <menuitem.isenabled>         <multibinding converter="{staticresource booleanandconverter}">             <binding path="prop1" converter="{staticresource converter1}" />             <binding path="prop2" converter="{staticresource converter1}" />         </multibinding>     </menuitem.isenabled> </menuitem 

converter1 contains error checking confirm called valid target type. throws exception if not, developer error , situation should fixed.

the problem when converter1 used in context target type system.object. booleanandconverter requires values of type (boolean), how can type passed target type of converter1?

as requested here booleanandconverter code:

    public object convert(object[] values, type targettype, object parameter, system.globalization.cultureinfo culture)     {         foreach (object value in values)         {             if (value.gettype() != typeof(bool))             {                 throw new argumentexception("booleanandconverter can used convert booleans."); // developer error             }         }          if (targettype != typeof(bool))         {             throw new argumentexception("booleanandconverter can convert boolean."); // developer error         }          foreach (object value in values)         {             if ((bool)value == false)             {                 return false;             }         }         return true;     } 

let me restate question there seems confusion. converter1 knows type can convert , to. throws exception when called wrong types. in situation targettype not getting specified , exception being thrown. how targettype specified correctly? when not used in multi-binding situation specified correctly based on being converted.

an possible alternative comments using commandparameter markupextension. write multibinding like:

<multibinding converter="{staticresource booleanandconverter}">   <binding path="prop1" converter="{conv:debugtypecheck, checktype={x:type sys:boolean}" />   <binding path="prop2" converter="{staticresource debugtypecheckconverter}" commandparameters="{x:type sys:boolean}" /> </multibinding> 

on stackoverflow can find several posts markupextension-converters here.

sample implementation both ways:

public class debugtypecheck : markupextension, ivalueconverter {     public override object providevalue(iserviceprovider serviceprovider)     {         return this;     }      public type checktype { get; set; }      [conditional("debug")]     public object convert(object value, type targettype, object parameter, system.globalization.cultureinfo culture)     {         if (value.gettype() != checktype)         {             throw new argumentexception(); // developer error         }          return value;     }        public object convertback(object value, type targettype, object parameter, system.globalization.cultureinfo culture)     {         throw new notimplementedexception();     }  }  public class debugtypecheckconverter : ivalueconverter {     public object convert(object value, type targettype, object parameter, system.globalization.cultureinfo culture)     {         if (value.gettype() != (type)parameter)         {             throw new argumentexception(); // developer error         }          return value;     }        public object convertback(object value, type targettype, object parameter, system.globalization.cultureinfo culture)     {         throw new notimplementedexception();     }  } 

Comments

Popular posts from this blog

toolbar - How to add link to user registration inside toobar in admin joomla 3 custom component -

linux - disk space limitation when creating war file -