דילוג לתוכן
  • דף הבית
  • קטגוריות
  • פוסטים אחרונים
  • משתמשים
  • חיפוש
  • חוקי הפורום
כיווץ
תחומים

תחומים - פורום חרדי מקצועי

💡 רוצה לזכור קריאת שמע בזמן? לחץ כאן!
  1. דף הבית
  2. תכנות
  3. ארכיון code613m
  4. WPF - תופעה מוזרה בדטה גריד

WPF - תופעה מוזרה בדטה גריד

מתוזמן נעוץ נעול הועבר ארכיון code613m
6 פוסטים 2 כותבים 370 צפיות
  • מהישן לחדש
  • מהחדש לישן
  • הכי הרבה הצבעות
התחברו כדי לפרסם תגובה
נושא זה נמחק. רק משתמשים עם הרשאות מתאימות יוכלו לצפות בו.
  • רחמיםר מנותק
    רחמיםר מנותק
    רחמים מורחק
    כתב ב נערך לאחרונה על ידי
    #1

    הגדרתי RowDetailsTemplate לדטה גריד שלי, כדי שיציג כמה פרטים נוספים על הרשומה הנבחרת
    ורציתי לבדוק מתי הדטה גריד יוצר את הפקד שאמור להופיע בתוך ה RowDetails ובשביל זה נרשמתי לארוע Loaded של אחד מהפקדים שבתוך RowDetailsTemplate
    והנה אני רואה שהארוע של הטעינה נורה שוב ושוב בלי שאני בוחר שורה כל שהיא אלא סתם גולל את הדטה גריד עם העכבר מלמעלה למטה ובחזרה, יש לציין שהוא מתחיל את ההתנהגות הזו לאחר שבחרתי שורה ואחר כך שורה אחרת ומאז בעת הגלילה נורה שוב ושוב הארוע של הטעינה עבור השורות שנראות בתצוגה בעת הגלילה.

    וכיון ש RowDetails שלי מכיל פקד שהמאפיין שלו דרוש משאב רשת הגלילה הופכת לאיטית מאוד כי כל הזמן הוא ניגש לרשת כדי לקבל את הנתונים וכל זה ללא צורך!

    יש מצב לממש בעצמי את RowDetails ? רעיונות לפתרון?

    פורסם במקור בפורום CODE613 ב23/11/2016 20:29 (+02:00)

    תגובה 1 תגובה אחרונה
    0
    • רחמיםר מנותק
      רחמיםר מנותק
      רחמים מורחק
      כתב ב נערך לאחרונה על ידי
      #2

      התברר שהבעיה היא לא ב RowDetails אלא בבינדינג עצמו, שהבינדינג בנוי כך שכאשר משתנה הדטה-קונטקסט של הפקד הוא מעדכן את הכל היעדים על פי המקור, ואע"פ שפקד היעד כלל לא נראה בתצוגה.

      יש רעיונות איך להתגבר על זה?

      פורסם במקור בפורום CODE613 ב24/11/2016 09:16 (+02:00)

      תגובה 1 תגובה אחרונה
      0
      • dovidD מנותק
        dovidD מנותק
        dovid ניהול
        כתב ב נערך לאחרונה על ידי
        #3

        אין בזה הרבה מסתורין. זה שליוב של שתי התנהגויות Collapsed + Virtual Mode.
        הפקד שנמצא בדטה גריד עבור הRowDetailsTemplate מוגדר על Collapsed שזה אומר שזה מרונדר מייד כאילו זה מוצג בשונה מHidden.
        בנוסף הדטה גד לא מייצר בכלל שורות שלא נראות מה שמביא את האפקט של יצירה תוך כדי גלילה. אם תבטל את הוירטואל מוד הכל ייווצר ברגע עליית הדטה גריד.
        אינני יודע אם קל לשנות את המימוש של RowDetiiled אבל קל מאוד ליצור משהו מקביל (בין שרה לשורה) שיעבור עם hiden ובעת לחיצה Visible, אבל כנראה שזה יהיה פחות נעים למשתמש - הוא יחוש קיפאון לשניה.
        אני חושב שהפקד שם לא אמור להיות כבד - זה לא לעניין פקד בעל משאבים פר שורה. במקרה זה הייתי עושה חלונית בצד שהקונטקסט שלה מאוגד לשורה הנוכחית בגריד.

        פורסם במקור בפורום CODE613 ב24/11/2016 10:39 (+02:00)

        מנטור אישי למתכנתים (ולא רק) – להתקדם לשלב הבא!

        בכל נושא אפשר ליצור קשר dovid@tchumim.com

        תגובה 1 תגובה אחרונה
        1
        • dovidD מנותק
          dovidD מנותק
          dovid ניהול
          כתב ב נערך לאחרונה על ידי
          #4

          אני רק עכשיו שמתי לב שהמשאב הוא רשת, חשבתי שמדובר בבעיית רנדור (תוכן עשיר מידי).
          אז כן הייתי חושב אולי כמוך לחפש אופציה להתחכם ולבקש רק בעת התצוגה ממש. צריך לבדוק את זה.

          פורסם במקור בפורום CODE613 ב24/11/2016 11:09 (+02:00)

          מנטור אישי למתכנתים (ולא רק) – להתקדם לשלב הבא!

          בכל נושא אפשר ליצור קשר dovid@tchumim.com

          תגובה 1 תגובה אחרונה
          0
          • רחמיםר מנותק
            רחמיםר מנותק
            רחמים מורחק
            כתב ב נערך לאחרונה על ידי
            #5

            זו בעיה בבינדינג, המפתחים שלו דאגו לתת אפשרות להגדיר מתי המקור יתעדכן בחזרה מהיעד אבל לא נתנו אפשרות לבחור מתי היעד יתעדכן מהמקור, ולכן המצב כעת שגם כאשר הפקד כלל לא נראה והדטה-קונטקסט שלו משתנה הבינדינג מיד מעדכן את היעד על פי המקור החדש. וזה ממש מיותר, חייבים רעיון איך למנוע את זה.

            פורסם במקור בפורום CODE613 ב24/11/2016 12:14 (+02:00)

            תגובה 1 תגובה אחרונה
            0
            • רחמיםר מנותק
              רחמיםר מנותק
              רחמים מורחק
              כתב ב נערך לאחרונה על ידי
              #6

              מצאתי פתרון פשוט וקל:

              Private Sub DataGrid_RowDetailsVisibilityChanged(sender As Object, e As System.Windows.Controls.DataGridRowDetailsEventArgs)
              
                      If e.Row.IsSelected Then
                          e.DetailsElement.DataContext = e.Row.DataContext
                      Else
                          e.DetailsElement.DataContext = Nothing
                      End If
              
              End Sub
              

              פורסם במקור בפורום CODE613 ב24/11/2016 12:34 (+02:00)

              תגובה 1 תגובה אחרונה
              0

              בא תתחבר לדף היומי!
              • התחברות

              • אין לך חשבון עדיין? הרשמה

              • התחברו או הירשמו כדי לחפש.
              • פוסט ראשון
                פוסט אחרון
              0
              • דף הבית
              • קטגוריות
              • פוסטים אחרונים
              • משתמשים
              • חיפוש
              • חוקי הפורום