Καλώς ορίσατε στο dotNETZone.gr - Σύνδεση | Εγγραφή | Βοήθεια
σε

 

Αρχική σελίδα Ιστολόγια Συζητήσεις Εκθέσεις Φωτογραφιών Αρχειοθήκες

ListBox, DataSource και ενημέρωση του UI

Îåêßíçóå áðü ôï ìÝëïò Νατάσα Μανουσοπούλου. Τελευταία δημοσίευση από το μέλος Νατάσα Μανουσοπούλου στις 12-10-2006, 09:04. Υπάρχουν 2 απαντήσεις.
Ταξινόμηση Δημοσιεύσεων: Προηγούμενο Επόμενο
  •  11-10-2006, 22:54 18506

    Angry [:@] ListBox, DataSource και ενημέρωση του UI

    Έχω ένα ListBox, στο οποίο θέτω σαν data source μια λίστα από αντικείμενα, και θέτω στο DisplayMember το όνομα του property (που λέγεται π.χ. LineText) που θέλω να φαίνεται μέσα στο ListBox. Ορίζω επίσης το event LineTextChanged, το οποίο πυροδοτεί ο setter του property.
    Όλα καλά έως εδώ, αλλά... Αν πειράξω μια γραμμή θέτοντας το LineText, το ListBox δεν ενημερώνει τα περιεχόμενά του. Θα περίμενα κάτι τέτοιο, μια που με έχει καλομάθει έτσι το property grid: φτιάξε το property XXX, φτιάξε το event XXXChanged, κάνε το fire στον setter του property, και η αλλαγή θα φανεί στο UI. Φαίνεται όμως ότι τα δύο controls τα έχουν φτιάξει διαφορετικές ομάδες και κάποια από τις δύο ήταν πιο καλή στο σχεδιασμό APIs Wink
    Μετά από ψάξιμο, διαπιστώνω ότι υπάρχει η ωραιότατη μέθοδος RefreshItem στο ListBox, η οποία όμως... είναι protected! Γιατί βέβαια να ενημερώσεις το UI του control όταν αλλάζει το περιεχόμενο του data source από πίσω είναι ευαίσθητη λειτουργία και δεν την δίνεις στο public interface!
    Οπότε ή φτιάχνω μια κατά τα άλλα άχρηστη κλάση που κληρονομεί από το ListBox μόνο και μόνο για να κάνω public μια protected method, ή την καλώ με Invoke και διατρέχω τον κίνδυνο να μην έχω ReflectionPermission. Τουλάχιστον με τον ένα ή τον άλλο τρόπο θα δουλέψει...

    Δεν υπάρχει ερώτηση, απλά το έβγαλα από πάνω μου, και το έμαθε όποιος δεν το ήξερε Smile

    Νατάσα Μανουσοπούλου
  •  11-10-2006, 23:35 18508 σε απάντηση της 18506

    Απ: ListBox, DataSource και ενημέρωση του UI

    Υπάρχει και άλλος ένας τρόπος. Αν θες να έχεις two-way data binding σε λίστα από αντικείμενα, τότε κάνε τη λίστα BindingList(Of Τ). Είναι ακριβώς γι αυτή τη δουλειά.


    Vir prudens non contra ventum mingit
  •  12-10-2006, 09:04 18512 σε απάντηση της 18508

    Απ: ListBox, DataSource και ενημέρωση του UI

    Ευχαριστώ, θα το κρατήσω, αν και στην παρούσα φάση και για λόγους πέραν των δυνάμεών μου αυτό το πραγματάκι είναι σε Framework 1.1 .


    Νατάσα Μανουσοπούλου
Προβολή Τροφοδοσίας RSS με μορφή XML
Με χρήση του Community Server (Commercial Edition), από την Telligent Systems