WPF: אי החזרת הערכים ע"י הקונוורטר
-
כתבתי קונוורטר שמקבל את הID של התרומה ויודע לחשב מהו הסכום המצטבר שנתרם כבר עד היום (מהתרומה הזאת), והערך המוחזר אמור להיות מוצג בdataGrid.
אלא מה שהתא הזה מוצג ריק (שאר התאים שמוצגים בשורות - עובדים מצויין).
חשבתי שהבעיה בקונוורטר - אבל בדקתי ע"י הדיבוג והכל עובד מצויין!
הוא קורא לפונקציות והם קוראות לפונקיות הנדרשות והכל מתקתק..
אבל משום מה הערך שמוחזר לא מוצג בטבלה.
הנה קוד הזאמל:<DataGridTemplateColumn Header="הסכום שנתרם עד היום"> <DataGridTemplateColumn.CellTemplate> <DataTemplate > <TextBlock Text="{Binding SumAllDonat}">//בינדינג למאפיין שמכיל את הסכום הכולל <TextBlock.DataContext> <MultiBinding Converter="{StaticResource conertSumAll}"> <Binding Path="IdDonation"/> //בינדינג למזהה של התרומה לצורך שליחתו לקונוורטר </MultiBinding> </TextBlock.DataContext> </TextBlock> </DataTemplate> </DataGridTemplateColumn.CellTemplate> </DataGridTemplateColumn>
ד.א. אני מבין שלא כותבים הערות בקוד הזאמל.. זה כותב לי שגיאה :lol:
והנה הקוד של מחלקת הקונוורטר:class ConvertSumAllDonation : IMultiValueConverter { public object Convert(object[] values, Type targetType, object parameter, CultureInfo culture) { try { var donationID = (int)values[0]; foreach (Donation donat in AddTorem.donations) { if (donat.IdDonation == donationID) { donat.SumMonthDonat = donat.SumMonthDonation(donat.StartDonation); donat.SumAllDonat = donat.SumAllDonation(donat.SumDonation, donat.freq); return donat.SumAllDonat; } } return null; } catch (Exception ex) { return 0; } }
גם כאן כשרציתי שהוא יציג את ההודעה של השגיאה בmessageBox קיבלתי איזה שגיאה מוזרה..
בדקתי בדיבוג והכל עובד מעולה.. הוא עובר על הלולאה והכל רץ.. רק הערך שמוחזר משום מה נעלם ואיננו כי לקח אותו..
אשמח לעזרה!!
תודה רבה!!פורסם במקור בפורום CODE613 ב06/08/2015 00:34 (+03:00)
-
אחרי שהסתבכתי עם זה וניסיתי כל מיני שינויים וכדו' וזה לא עבד..
עלה בי הרעיון שבכלל אין צורך בקונוורטר, כיון שבעצם אני רוצה להריץ כמה מתודות שמחשבות את משך התרומה עד היום ואת סכום התרומה, ואת הערכים הם שומרות במשתנים של התרומה. אז הגדרתי שבטעינה של הטאב הרלוונטי הוא יריץ את הפונקציות, וממילא אח"כ בטבלה יוצגו הערכים הנכונים..
כתבתי כך:private void previewDonations_Loaded(object sender, RoutedEventArgs e) { foreach (Donation donat in AddTorem.donations) { donat.SumAllDonat = donat.SumAllDonation(donat); } }
ממילא המתודה עצמה מחשבת ושומרת את הערכים במשתנים הרלבנטיים, וכך הכל מוצג בדטה גריד נכון לרגע טעינת התכנית.
בכל אופן מעניין אותי להבין מה הייתה הבעיה ולמה הבינדינג לא עבד..
יכול להיות בגלל שהקונוורטר החזיר ערך מסוג double ואילו הדטה גריד מציג סטרינג?פורסם במקור בפורום CODE613 ב06/08/2015 14:00 (+03:00)