בינדינג לradioButton לערכים שהוגדרו בתור ENUM
-
יש לי שני משתנים שהם מסוג enum
(הראשון לגבי מין האדם:זכר או נקבה) והשני לגבי סוג התרומה (חד פעמית/חדשית).למשתמש אני מציג את זה כradioButton, ואני רוצה לעשות בינדינג למשתנים הללו שכאשר בוחרים בסימון לאחד מהדברים יבחר הערך הנכון מהenum/
האם אפשר לעשות זאת או שחייבים בשביל זה להשתמש בקוד?תודה רבה רבה!!
public enum Gender { male, female} public Gender gender { get; set; }
קוד זאמל:
<HeaderedContentControl Header="מין"> <Grid> <WrapPanel> <RadioButton IsChecked="True" x:Name="maleRadioButton" >זכר</RadioButton> <RadioButton x:Name="femaleRB">נקבה</RadioButton> </WrapPanel> </Grid> </HeaderedContentControl>
פורסם במקור בפורום CODE613 ב23/07/2015 18:36 (+03:00)
-
אי אפשר לעשות בינדינג למשתנים חייבים לאגד פקד למאפיין דווקא, אז פשוט תיצור שני מאפיינים
אבל כיון שהערך של הרדיו הוא בוליאני והערך של המשתנים הוא מטיפוס החדש שיצרת צריך ליצור מחלקה של קונוורטר שימיר מזה לזה ובחזרה.פורסם במקור בפורום CODE613 ב23/07/2015 19:11 (+03:00)
-
איזה ערך הרדיו בוטון מכיל? חשבתי שזה ערך בוליאני ולכן כתבתי את הקונוורטור הבא:
public object Convert(object value, Type targetType, object parameter, CultureInfo culture) { bool _value = (bool)value; if (_value == true) return Gender.female; else return Gender.male; }
ובקוד הזאמל כתבתי כך:
<HeaderedContentControl Header="מין"> <Grid> <WrapPanel> <RadioButton IsChecked="True">זכר</RadioButton> <RadioButton IsChecked="{Binding Converter={StaticResource convertorGender}, Path=gender}" >נקבה</RadioButton> </WrapPanel> </Grid> </HeaderedContentControl>
הבעיה היא שכאשר אני מריץ אותו הוא זורק לי שהערך אינו מתאים, בדקתי בדבג ובאמת אני רואה שהוא זורק את הערך male (כלומר המאפיין gender מכיל את male או את female, וערך ברירת המחדל שלו הוא male). כנראה זה בגלל שעשיתי לו בבינדינג path לערך הזה, אז הוא מציג לי את ערך ברירת המחדל שלו. אם אני מנסה למחוק את הpath ולהשאיר רק את הconverter אז אני מקבל הודעת שגיאה, ובצדק כיון שהוא לא יודע היכן לשמור את הבינידנג...
מה לעשות?
תודה ושבת שלום!! ובבניין ירושלים ננוחם!!פורסם במקור בפורום CODE613 ב24/07/2015 17:14 (+03:00)
-
נראה לי מקופיא, שהממיר צריך לעבוד הפוך, כלומר להמיר מENUM שלך לבוליאני כיון שבינדינג פירושו שהפקד מקבל ערך מהמקור כלומר הכל מתחיל מהמקור ואז חוזר לפקד, א"כ בפונקציה Convert צריך לממש המרה מהENUM לבוליאני.
שבת שלום לך ולכל ישראל
במהרה יבוא גואל
ויחלצנו מכל צרה
מאפילה לאורה.פורסם במקור בפורום CODE613 ב24/07/2015 17:47 (+03:00)