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
Post a Comment