locked
הבדל בין DataGridCheckBoxColumn לבין CheckBox בתוך DataGridTemplateColumn RRS feed

  • שאלה

  • במסגרת נסיונות הצמצום נתקלתי בתופעה מוזרה נוספת:

    יצרתי באותו גריד, עם אותו בינדינג, בעזרת זאמל, שתי עמודות CheckBox:

    אחת באמצעות DataGridCheckBoxColumn,

    והשניה באמצעות DataGridTemplateColumn שבתוכו CheckBox.

    בעמודה שנוצרה ע"י DataGridCheckBoxColumn- יש את הבעיה (יש תגובה ללחיצה רק בפעם השניה) ובעמודה שנוצרה ע"י DataGridTemplateColumn אין את הבעיה!

    למיטב הבנתי אין שום הבדל בין העמודות.

    זה הזאמל:

    <Grid>
    
            <DataGrid ItemsSource="{Binding}" AutoGenerateColumns="False" Width="Auto" Margin="295,45,12,66" >
                <DataGrid.Columns>
                    <DataGridCheckBoxColumn ></DataGridCheckBoxColumn>  
                    <DataGridTemplateColumn >
                        <DataGridTemplateColumn.CellTemplate>
                            <DataTemplate>
                                <CheckBox/>
                            </DataTemplate>
                        </DataGridTemplateColumn.CellTemplate>
                    </DataGridTemplateColumn>
                </DataGrid.Columns>
            </DataGrid>
            
    </Grid>

    וזה ה code-behind:

    public MainWindow()
            {           
                InitializeComponent();
                DataTable myDataTable = new DataTable("My Data");
                
                myDataTable.Columns.Add("Column A");
                myDataTable.Columns.Add("Column B");
    
                
                myDataTable.Rows.Add("A1", "True");
                myDataTable.Rows.Add("A2", "False");
                myDataTable.Rows.Add("A3", "True");
    
                DataContext = myDataTable.DefaultView;
            }
    תודה רבה,

    וסליחה אם חפרתי יותר מדי.. :)

    [אני פשוט מנסה להבין כמה שיותר לעומק]

    • פוצל על-ידי Elad R Katz יום ראשון 12 אוגוסט 2012 09:13 שאלה חדשה
    יום שני 06 אוגוסט 2012 08:55

תשובות

  • פיצלתי את השאלה היות והיא שאלה חדשה.

    יש הבדל בין שני המקרים, והדרך הטובה ביותר לראות זאת זה ע"י Snoop, שמאפשר לי לראות את העץ הויזואלי שנוצר בפועל ואת האירועים בעץ הזה. (http://snoopwpf.codeplex.com/)

    בצד שמאל סימנתי את העצים הויזואלים. הראשון זה ה DataGridCheckBoxColumn והשני הוא ה DataGridTemplateColumn.
    את יכולה לראות שיש הבדל בעצים - במקרה השני נוצר עוד ContentPresenter "מיותר". בנוסף, ההתנהגות בפועל של ה DataGrid היא שונה היות והוא תופס את האירועים בצורה שונה.

    בצד ימין סימנתי את האירועים שקרו בלחיצות עכבר. הסימון הראשון הוא בלחיצה על ה DataGridCheckBoxColumn  והשני הוא בלחיצה על DataGridTemplateColumn. את יכולה לראות שבמקרה הראשון הBorder "תופס" את הלחיצה ולא מעביר אותה לCheckBox. במקום זה הגריד "נכנס למצב עריכה" (זו ההתנהגות של גריד כשלוחצים על Column רגיל), בעוד במקרה השני לא.

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


    http://blogs.microsoft.co.il/blogs/eladkatz @ElatKt

    • הוצע כתשובה על-ידי Elad R Katz יום ראשון 12 אוגוסט 2012 12:38
    • סומן כתשובה על-ידי Eran Sharvit יום שני 13 אוגוסט 2012 22:23
    יום ראשון 12 אוגוסט 2012 09:38

כל התגובות

  • פיצלתי את השאלה היות והיא שאלה חדשה.

    יש הבדל בין שני המקרים, והדרך הטובה ביותר לראות זאת זה ע"י Snoop, שמאפשר לי לראות את העץ הויזואלי שנוצר בפועל ואת האירועים בעץ הזה. (http://snoopwpf.codeplex.com/)

    בצד שמאל סימנתי את העצים הויזואלים. הראשון זה ה DataGridCheckBoxColumn והשני הוא ה DataGridTemplateColumn.
    את יכולה לראות שיש הבדל בעצים - במקרה השני נוצר עוד ContentPresenter "מיותר". בנוסף, ההתנהגות בפועל של ה DataGrid היא שונה היות והוא תופס את האירועים בצורה שונה.

    בצד ימין סימנתי את האירועים שקרו בלחיצות עכבר. הסימון הראשון הוא בלחיצה על ה DataGridCheckBoxColumn  והשני הוא בלחיצה על DataGridTemplateColumn. את יכולה לראות שבמקרה הראשון הBorder "תופס" את הלחיצה ולא מעביר אותה לCheckBox. במקום זה הגריד "נכנס למצב עריכה" (זו ההתנהגות של גריד כשלוחצים על Column רגיל), בעוד במקרה השני לא.

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


    http://blogs.microsoft.co.il/blogs/eladkatz @ElatKt

    • הוצע כתשובה על-ידי Elad R Katz יום ראשון 12 אוגוסט 2012 12:38
    • סומן כתשובה על-ידי Eran Sharvit יום שני 13 אוגוסט 2012 22:23
    יום ראשון 12 אוגוסט 2012 09:38
  • הבנתי. תודה רבה על התשובה המושקעת!

    יום ראשון 12 אוגוסט 2012 11:51