WPF: בעיה בבינדינג לקומבובוקס
-
אני מנסה לקשור ליסט של אינדקסים לקומבובוקס, אך ללא הצלחה.
עקרונית, אני רוצה שהאייטם הראשון יהיה: "בחר ספר לחיפוש", ומתחתיו יוצגו שמות הספרים לחיפוש.
את הבינדינג אני יוצר בזמן ריצה לליסט של כל האינדקסים, ע"י שאני מקשר אותו למאפיין dataContext של הקומבובוקס.
ניסיתי לכתוב באופן הזה, אך ללא הועיל:<ComboBox Margin="5,2" Padding="2" SelectedIndex="0" Width="150" Height="30" x:Name="comboIndex12" > <ComboBox.ItemsSource> <CompositeCollection > <ComboBoxItem IsSelected="True">בחר ספר לחיפוש</ComboBoxItem> <CollectionContainer Collection="{Binding NameBookToIndex}"></CollectionContainer> </CompositeCollection> </ComboBox.ItemsSource>
כמו כן, ניסיתי בצורה כזאת:
<ComboBox Margin="5,2" Padding="2" SelectedIndex="0" Width="150" Height="30" x:Name="comboIndex12" > <ComboBox.ItemsSource> <CompositeCollection > <ComboBoxItem IsSelected="True">בחר ספר לחיפוש</ComboBoxItem> <CollectionContainer Collection="{Binding }"></CollectionContainer> </CompositeCollection> </ComboBox.ItemsSource> <ComboBox.ItemTemplate> <DataTemplate> <TextBlock Text="{Binding Path=NameBookToIndex}"/> </DataTemplate> </ComboBox.ItemTemplate> </ComboBox>
הצד השווה שבהם.. שהוא מראה לי רק את "בחר ספר לחיפוש" ותו לא :oops:
החלטתי לוותר על האייטם הנוסף וכתבתי כך:<ComboBox Margin="5,2" Padding="2" ItemsSource="{Binding NameBookToIndex}" SelectedIndex="0" Width="150" Height="30" x:Name="comboIndex12" / >
במקרה הזה, הוא אכן מציג לי רק את השם של האינדקס הראשון, אך הוא מציג כל אות כשורה נפרדת
כלומר הוא בטוח שהרשימה שהוא צריך להציג זה האותיות של השם של הספר..
האפשרות היחידה שעבדה לי הייתה כך:<ComboBox Margin="5,2" Padding="2" ItemsSource="{Binding}" SelectedIndex="0" Width="150" Height="30" x:Name="comboIndex12" > <ComboBox.ItemTemplate> <DataTemplate> <TextBlock Text="{Binding NameBookToIndex}"/> </DataTemplate> </ComboBox.ItemTemplate> </ComboBox>
אך כך זה בלי להציג את האייטם הנוסף שרציתי להוסיף...
מה הבעיה שלי? כיצד אוכל שזה גם יציג את השמות של כל הספרים שבאוסף, וגם יציג את האייטם הנוסף..תודה רבה!
פורסם במקור בפורום CODE613 ב08/06/2016 00:11 (+03:00)
-
בשתי קטעי הקוד הראשונים יש גם בעיה של בינדינג לdatacontex בCollectionContainer (הסיבה ממש פשוטה - אין לחיה הזאת דטה קונטקסט), בעיה שמצאתי פה: http://stackoverflow.com/a/6446923/1271037. לכן אתה חייב לכתוב Source ראה שם דרך לקשר לDataContext של האב בצורה מפורשת', או יותר פשוט ופחות "אקדמי" - לתת שם לCollectionContainer ולשים בקוד את האוסף במאפיין הקולקשיין במקום בדטה קונטקסט של הקומבו.
בקטע קוד הראשון והשלישי (שיש את השם של המאפיין NameBookToIndex) יש טעות לכתוב את המאפיין המייצג פריט בנתיב שמהווה המקור לכל הפריטים (ולא מה לשלוף בכל פריט).בנוגע למה להציג, כלומר איך כל אלמנט יהיה מוצג ע"י המאפיין NameBookToIndex האישי שלו, אפשר להשתמש בDisplayMemberPath בקומבו, ככה:
DisplayMemberPath="NameBookToIndex"
או כמו בקוד השני שזה עם דטה טמפלט. האפשרות הזו ארוכה יותר אך עדיפה, כי היא מכסה גם את הטקסט שמופיע כשהקומבו סגור (אני עייף מלהבין אבל עובדה, ניסיתי :)).ואגב, אתה כבר דרכת בעניין http://code.613m.org/viewtopic.php?f=1&t=880&p=5729
פורסם במקור בפורום CODE613 ב08/06/2016 01:29 (+03:00)