c# - How to use SbyteToBoolConverter converter in wpf, for converting bool property to sbyte in the UI -


i have sbytetoboolconverter can use checkbox if had sbyte type of property. code goes this:

class sbytetoboolconverter: ivalueconverter {     public object convert(object value, type targettype, object parameter, system.globalization.cultureinfo culture)     {         if ((sbyte)value == 0)             return false;         else             return true;     }      public object convertback(object value, type targettype, object parameter, system.globalization.cultureinfo culture)     {         if ((bool)value)             return 1;         else             return 0;     } } 

however looking opposite of this, have boolean property , want show 0 or 1 on ui, combobox control. have use opposite converter, booltosbyteconverter.

my question is, can not use same sbytetoboolconverter achieving somehow, after have replace convert , convertback call.

is there way work same converter or have create new 1 opposite of this.

re-using converter opposite direction mean exchange convert , convertback methods. technically should possible - first need extract logic new methods (let's example call convertbooltosbyte , convertsbytetobool), , convert / convertback call 1 of these, based on flag specifies direction used. such converter similar following:

class sbytetoboolconverter: ivalueconverter {     public bool useoppositedirection { get; set; }      public object convert(object value, type targettype, object parameter, system.globalization.cultureinfo culture)     {         if (useoppositedirection)             return convertsbytetobool((sbyte)value);         else             return convertbooltosbyte((bool)value);     }      public object convertback(object value, type targettype, object parameter, system.globalization.cultureinfo culture)     {         if (useoppositedirection)             return convertbooltosbyte((bool)value);         else             return convertsbytetobool((sbyte)value);     }      public sbyte convertbooltosbyte(bool input)     {         if (input)             return 1;         else             return 0;     }      public bool convertsbytetobool(sbyte input)     {         if (input == 0)             return false;         else             return true;     } } 

from xaml, you'd reference 2 instances of converter, 1 each direction:

<page.resources>     <sbytetoboolconverter x:key="sbytetoboolconverter" useoppositedirection="false" />     <sbytetoboolconverter x:key="booltosbyteconverter" useoppositedirection="true" /> </page.resources> 

...and use 1 of these within binding expressions, depending on desired direction.

you might able automatically detect desired direction based on type of input value, , through rid of useoppositedirection parameter:

class sbytetoboolconverter: ivalueconverter {     public object convert(object value, type targettype, object parameter, system.globalization.cultureinfo culture)     {         if (value if sbyte)             return convertsbytetobool((sbyte)value);         else             return convertbooltosbyte((bool)value);     }      public object convertback(object value, type targettype, object parameter, system.globalization.cultureinfo culture)     {         if (value bool)             return convertbooltosbyte((bool)value);         else             return convertsbytetobool((sbyte)value);     }      ... } 

however: clemens pointed out, creating second converter might simpler, , in addition code easier read , maintain.


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 -

How to provide Authorization & Authentication using Asp.net, C#? -