לא מצליח לעשות DataContext ועוד כמה שאלות בWPF
-
למדתי כאן על הגדרת datacontext
אני מנסה ליישם זאת אצלי בתוכנית, אבל אני מקבל הודעת שגיאה:
An object reference is required for the non-static field, method, or property 'System.Windows.FrameworkElement.DataContext.get
יש למישהו מושג למה??
כמו כן, הוא נותן לי רק את האפשרות DataContextProperty וכדי לקבל את הדטה קונטקסט אני מוכרח למחוק לו את הסוף.. למה?
תודה רבה!!שאלות נוספת:
בחלון אחד של התכנית נתתי למשתמש אפשרות להזין פרטים של תורמים, וכל הנתונים נשמרים באובייקט 'תורם' חדש, וכל התורמים מאוחסנים בList.
עכשיו, אני מנסה ליצור חלון חדש שבו תוצג למשתמש רשימה של כל התורמים שהוזנו בחלון הראשון.
הבעיה שלי היא שבחלון השני לא יעזור לי ליצור אובייקט חדש, כי אני צריך את המידע שנשמר באובייקטים הקודמים. אבל מצד שני אני לא מצליח לגשת אליהם. למרות שניסיתי להגדיר אותם בתור public. איך אני אמור לעשות זאת?
כמו כן, באיזה פקד הכי כדאי להשתמש כדי להציג את כל המידע בחלון (listBox/DataGrid)?
תודה רבה!!
אברהםפורסם במקור בפורום CODE613 ב29/06/2015 20:49 (+03:00)
-
תעלה קוד של הבעיה-בתוך תגית קוד, שנוכל להבין יותר במדויק.
כדי להעביר מידע בין חלונות שונים, אתה יכול להגדיר את האובייקט שלך ב-static ואז לגשת אליו מכל מחלקה אחרת ע"י ציון שם המחלקה המכילה את האובייקט + נקודה + שם האובייקט.
לדוגמה, הקוד של חלון1:public class Form1 { public static string s1; ... }
הקוד של חלון 2-משתמש במשתנה s1 שהוגדר בחלון1:
public class Form2 { String s2 =Form1.s1;
בהצלחה
פורסם במקור בפורום CODE613 ב30/06/2015 02:13 (+03:00)
-
שברתי על זה את הראש כמה שעות עכשיו...
לא חשבתי על הפתרון של משתנה סטטי, אם כי אני לא בטוח שזה יעיל, כיון שאני בחלון אחד מזין רשימת שמות של הרבה "תורמים" (list של אובייקט מסוג '"תורם"), ואני רוצה אח"כ את כל הרשימה הזאת להציג בחלון אחר. משתנה סטטי יעיל רק במקרה בו אני צריך רק משתנה אחד, לא? (כגון מונה וכדו').הפתרון שמצאתי הוא להגדיר כפתור של 'חזור' שכאשר לוחצים עליו הוא מציב את הערך true ב DialogResult (לאחר חיפוש ממושך בפורום הבנתי שזה מה שצריך לעשות..). ואח"כ בחלון הראשי אני מציב את הערך של הList שלי בתור ה DataContext של החלון השני.
ככה:donors.Add(donor1); DialogResult = true;
ובחלון הראשי:
private void ViewClick(object sender, RoutedEventArgs e) { viewDonor vd = new viewDonor(); vd.DataContext = ad.donors; // ad זהו החלון הקודם (addDonor) vd.ShowDialog(); }
הבעיה שלי כרגע (שעדיין לא מצאתי לה פתרון..) היא שאחרי שאני חוזר לחלון הראשי, אם אני רוצה להכנס חזרה לחלון של הוספת תורמים, התוכנה קורסת... אין לי מושג למה..
פורסם במקור בפורום CODE613 ב30/06/2015 02:46 (+03:00)
-
שאלה נוספת:
בחלון של תצוגת התורמים הצבתי אובייקט מסוג datagrid וקישרתי אותו לdatacontext
הבעיה שלי היא שאמנם הוא מציג מספר רשומות בטבלה כמספר האובייקטים שיש לי בlist..
אבל הבעיה היא שכל הערכים הם כערך של האובייקט האחרון שהזנתי.
מה עושים??
תודה מראש!!פורסם במקור בפורום CODE613 ב30/06/2015 03:12 (+03:00)
-
אברהם, אני רוצה לחלק רגע בין מצב לימוד שלך למצב סופי.
אם הנושא הוא ללמוד איך להעביר ליסט מחלון לחלון וכו' אז אתה יכול להתעלם מהמשך הדברים.אם אתה מסתכל קדימה, אז בסוף התהליך תצטרך לשמור את הנתונים.
אפשר XML, בינארי וכו'.אבל למה שלא תתחיל מעכשיו לגעת גם בדאטאבייס? כי לדעתי לשם תגיע בסופו של דבר?
אני עוקב אחרי ההודעות שאתה כותב, ורואה שאתה מאד כשרוני להבין דברים <!-- s:-) --><img src="{SMILIES_PATH}/icon_e_smile.gif" alt=":-)" title="מחייך" /><!-- s:-) -->, אני חושב שכדאי שתלך לכיוון של דאטאבייס SQL. שם חלק מהתשובות בנושא זה יהיו "לרענן את החלון"בהצלחה!
פורסם במקור בפורום CODE613 ב30/06/2015 11:05 (+03:00)
-
אברהם בלתי אפשרי לענות ככה על מבול שאלות. אני מבקש: כל שאלה אשכול. מצידי פתח מאה ביום - רק שאלות שמממש תלויות זו בזו באותו הודעה.
א. הצבה בDataContext נותנת שגיאה:
תראה את הקוד שעשית, מן הסתם שכחת new.ב. אין ברשימה אוטומטית DataCintext כי אם DataContextProperty.
אתה כנראה כותב שם חלון ולא מופע. אם תכתוב this. או ללא שם בכלל אז תראה DataContext ברשימה.ג. העברת מידע בין חלון לחלון. יש כמה וכמה דרכים.
- Counstactor, בחלון המשני. בקריאה אילו מהחלון הראשון מעבירים את המידע כפרמטר.
- מאפיין ציבורי, בחלון המשני. מציבים בו ערך אחרי שיצרו את החלון (new) לפני הShow.
- מאפיין סטטי ציבורי איפושהוא. פחות מומלץ. אבל אפשר לשמור בו הן אובייקט בודד והן מערך או כל אובייקט דוטנטי כמו כל מאפיין ומשתנה מופעי.
ד. באיזה פקד נוח להשתמש.
הפקד GridView כולל כבר עריכה והוספת חדשים. מצד שני הוא מרוכב לעיצוב מותאם וללוגיקה. הוא עשיר בתכונות וממילא כבד לשימוש.
ListBox זה פקד שאני הכי משתמש בו בWPF.לא הרחבתי באף תשובה כי זה בלגן. אם משהו לא מובן תתמקד בו ותשאל.
פורסם במקור בפורום CODE613 ב30/06/2015 13:34 (+03:00)
-
אברהם, אני רוצה לחלק רגע בין מצב לימוד שלך למצב סופי.
אם הנושא הוא ללמוד איך להעביר ליסט מחלון לחלון וכו' אז אתה יכול להתעלם מהמשך הדברים.אם אתה מסתכל קדימה, אז בסוף התהליך תצטרך לשמור את הנתונים.
אפשר XML, בינארי וכו'.אבל למה שלא תתחיל מעכשיו לגעת גם בדאטאבייס? כי לדעתי לשם תגיע בסופו של דבר?
הנושא שלי הוא ללמוד, השאלה האם יש טעם ללמוד זאת או שגם ככה בסוף משתמשים בדטהבייס כך שאין צורך להשתמש בזה?
לגבי שמירת הנתונים: אשמח לדעת איך אני עושה זאת? האם בשביל זה צריך להשתמש ב serializtion?
אז אני מבין שאני צריך ללמוד גם את זה.. (לחפש על זה אצל הרב גוגל :lol: )
וגם את הקישור לsql..פורסם במקור בפורום CODE613 ב01/07/2015 13:26 (+03:00)
-
@דוד ל.ט.
אברהם בלתי אפשרי לענות ככה על מבול שאלות. אני מבקש: כל שאלה אשכול. מצידי פתח מאה ביום - רק שאלות שמממש תלויות זו בזו באותו הודעה.
מקבל את ההערה!
@דוד ל.ט.א. הצבה בDataContext נותנת שגיאה:
תראה את הקוד שעשית, מן הסתם שכחת new.
ב. אין ברשימה אוטומטית DataCintext כי אם DataContextProperty.
אתה כנראה כותב שם חלון ולא מופע. אם תכתוב this. או ללא שם בכלל אז תראה DataContext ברשימה.הקוד שעשיתי הוא:
public MainWindow() { InitializeComponent(); Class2 cl = new Class2(); Grid.DataContext = cl; }
על זה הוא נתן לי את השגיאה הנ"ל. אבל הבנתי שהטעות שלי היא בגלל שלא נתתי שם לgrid, אחרי שנתתי לו שם וכתבתי:
grid1.DataContext = cl;
הכל בא על מקומו בשלום! (זה מה שהתכוונת כנראה שלא כתבתי שם של מופע? כי ניסיתי עם this וזה לא עזר.)
פורסם במקור בפורום CODE613 ב01/07/2015 13:45 (+03:00)