WPF קומבו מיוחד בתוך dataGrid לא מקבל event
-
יש לי קומבו שיורש מקומבו רגיל ומוסיף לעצמו כפתור של "הוסף חדש". את הקומבו הזה שמתי בתוך userControl שהוא אחראי למלא את האיברים בקומבו בהתאם לפרמטרים שנשלחים אליו.
הקומבו עובד טוב רק הבעיה מתחילה כשאני שמה אותו בתוך datagrid בצורה הבאה:<DataGridTemplateColumn Header="תאור" Width="Auto" > <DataGridTemplateColumn.CellTemplate> <DataTemplate> <controls:MyComboBox x:Name="DescriptionCombo" Height="20" SelectedVal="{Binding Description,Mode=TwoWay}" ParentControl="ContactsCommunications" Sub="Description"/> </DataTemplate> </DataGridTemplateColumn.CellTemplate> </DataGridTemplateColumn>
(ParentControl ו-Sub הם dependencyProperties לצורך מילוי הקומבו)
בתוך ה-usercontrol שנקרא MyComboBox יש את הקומבו המיוחד שנקרא :EnhancedComboBox הקוד נראה כך:
<local:EnhancedComboBox x:Name="comboBox" MinWidth="20" Margin="5,0,0,0" EnableNewItemAddition="True" AddNewItemText="הוסף חדש" AddNewItemButtonClicked="EnhancedComboBox_AddNewItemButtonClicked" SelectedValue="{Binding SelectedVal,ElementName=MyComboUserControl}" SelectedValuePath="ID" DisplayMemberPath="Value" SelectionChanged="combo_SelectionChanged"> </local:EnhancedComboBox>
הוקמבו מופיע, יש לו ערכים כשפותחים אותו אבל אי אפשר לבחור איבר או להחליף את הבחירה שהיתה בו. זה נראה שהוא פשוט לא מקבל בכלל את ה-event. הוספתי לו event של combo_SelectionChanged ובאמת אם הוא בתוך הגריד הוא לא מגיע אליו.
ראיתי בחיפוש באינטרנט שיש מצב שה-datagrid לא מעביר לקומבו את האירועים. הבעיה היא שאני לא מבינה מה עושים בכזה מקרה, איך משחררים את האירוע?פורסם במקור בפורום CODE613 ב11/07/2013 00:17 (+03:00)
-
ניסיתי משהו דומה אצלי והכל עובד. מעניין מה קורה שמה.
(דוקא לי היו בעיות עם הביינדיגים).אם את שמה את הקומבו מחוץ לדטהגריד אם אותם הגדרות בבינדינג, הכל דופק?
ולמה מחלקה יורשת בתוך UserControl ולא ישירות הכל במחלקה היורשת או ביוזר קונטרול?פורסם במקור בפורום CODE613 ב11/07/2013 13:12 (+03:00)
-
אם אני שמה את ה-user control במקום אחר - ולא בתוך הגריד אז הכל עובד בסדר. רק הבעיה אם הוא מוכנס לתוך הגריד.
יש לי יוזר קונטרול MyCombobox שהוא אחראי על הבינדינג - ב-laod הוא מאתחל את הרשימה לפי הפרמטרים שנשלחים אליו ב-dependencyProperty והוא בעצם מאתחל את ה-local:EnhancedComboBox (שהוא יורש מ-combobox רגיל ומוסיף לו כפתור של הוסף חדש).
ה- local:EnhancedComboBox הוא קוד שהורדתי מהאיטנרנט:מכיל מחלקה ו-style הוא לא יוזר קונטרול לכן יצרתי יוזר קונטרול שבעצם מכיל כזה קומבו.
לא ברור לי למה ההתנהגות שונה אם הוא מונח בתוך הגריד.פורסם במקור בפורום CODE613 ב11/07/2013 20:28 (+03:00)
-
מצאתי את הפתרון! זה לא שהקומבו בגריד לא עבד אלא פשוט לא הכנסתי אותו נכון לתוך ה-dataGrid.
אני הגדרתי אותו בתוך DataGridTemplateColumn.CellTemplate במקום להגדיר אותו בתוך DataGridTemplateColumn.CellEditingTemplate ולכן הוא איפשר לפתוח את הקומבו אבל לא לבחור בו ערכים. ששיניתי את זה למיקום החדש (והוספתי ב-DataGridTemplateColumn.CellTemplate טקסט עבור ה-selectedItem של הקומבו.)פורסם במקור בפורום CODE613 ב14/07/2013 22:14 (+03:00)
-
הבעיה שאצלי זה עבוד גם במקטע הCellTemplate...
(הורדתי את הפקד, וחיקיתי כמעט עד לפרט האחרון את התנהגות הקוד שצירפת).
הרעיון של הEditing זה שהוא נכנס לפעולה רק אחרי דבל קליק. אבל אפשר לשנות ערכים גם ממצב CellTemplate רגיל.מעניין איפה הבאג, אבל העיקר שעובד.
פורסם במקור בפורום CODE613 ב14/07/2013 22:28 (+03:00)