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

 

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

Collapse αντικειμένων σε TreeView(WPF)

Îåêßíçóå áðü ôï ìÝëïò Γραμματικόπουλος Νικόλαος. Τελευταία δημοσίευση από το μέλος Γραμματικόπουλος Νικόλαος στις 20-02-2012, 14:30. Υπάρχουν 2 απαντήσεις.
Ταξινόμηση Δημοσιεύσεων: Προηγούμενο Επόμενο
  •  20-02-2012, 13:10 69380

    Collapse αντικειμένων σε TreeView(WPF)

    Καλησπέρα,

    αυτό που θέλω να κάνω είναι να κάνω Collapse τα παιδιά των πρώτων αντικειμένων που υπάρχουνε μέσα σ’ ένα ΤreeView με CheckBoxes σε WPF App C#.
    Το πρόβλημα μου είναι πως αυτό το TreeView γεμιζεί (μέσω της μεθόδου ItemsSource() ) απο μία κλάση που έχει φτιάξει κάποιος άλλος την οποία την έχει ονομάσει ViewModel. Έχει επίσης 2 Properties στη κλάση αυτή με όνομα Name και Tag. Έτσι όταν του λέω να κληρονομήσει τη κλάση TreeViewItems ή TreeNode υπάρχει confilct των Properties των 2 αυτών κλάσεων (ViewModel μεTreeViewItems  ή ViewModel με TreeNode).

    Αν δεν αλλάξω τα ονόματα Name kai Tag δεν εμφανίζει τίποτα στο TreeView. Αν τ’ αλλάξω εμφανίζονται μόνο τα CheckBoxes και με την σωστή ιεραρχία των αντικειμένων μάλιστα.

    Τι μπορώ να κάνω ώστε να κάνω Collapse τ’ αντικείμενα αυτα;

    Ευχαριστώ

     

    Δημοσίευση στην κατηγορία: , ,
  •  20-02-2012, 14:14 69383 σε απάντηση της 69380

    Απ: Collapse αντικειμένων σε TreeView(WPF)

    Ποιός είναι ο κώδικας (XAML, code-behind, viewmodel)?  Υποψιάζομαι πάντως ότι δεν έχεις ξανασυναντήσει το Model-View-ViewModel pattern, τον πιο δημοφιλή τρόπο ανάπτυξης UI σε WPF και Silverlight.

    Το data binding του WPF επιτρέπει να συνδέσεις τα properties ενός control με properties ενός οποιουδήποτε αντικειμένου, απλά δίνοντας το όνομα του target property. Σε αυτό βασίζεται το pattern Model-View-ViewModel για να αποσυνδέσει την αναπαράσταση δεδομένων (το View) από τα ίδια τα δεδομένα (ViewModel). Οι κλάσεις του ViewModel δεν χρειάζεται να υλοποιούν το παραμικρό, απλά να παρέχουν τα σωστά properties. Στην περίπτωση σου, οποιοδήποτε αντικείμενο με Name και Tag properties, μπορεί να χρησιμοποιηθεί από το TreeView.

    Οι κλάσεις του ViewModel δεν έχουν και ΔΕΝ ΠΡΕΠΕΙ να έχουν καμμία σχέση με το UI. Το collapse, expand είνα δουλειά του UI, όχι των δεδομένων. Συνεπώς, είναι μεγάλο λάθος να προσπαθείς να κληρονομήσεις από οποιαδήποτε κλάση UI όπως η TreeNode.

    Για να ελέγξεις το collapse από τον κώδικα, θα πρέπει να χρησιμοποιήσεις Data binding και να συνδέσεις το IsExpanded property με κάποιο boolean property στο ViewModel σου. Θα πρέπει επίσης να φροντίσεις το ViewModel σου να υλοποιεί το interface INotifyPropertyChange για να ειδοποιήσει το View ότι κάτι άλλαξε και να γίνει το αντίστοιχο refresh. 

    Σε κάθε περίπτωση, δεν θα πρέπει να αρχίσεις να αλλάζεις τον κώδικα που ήδη υπάρχει πριν καταλάβεις πως δουλεύει το MVVM και το WPF. 

    Παναγιώτης Καναβός, Freelancer
    Twitter: http://www.twitter.com/pkanavos
  •  20-02-2012, 14:30 69385 σε απάντηση της 69383

    Απ: Collapse αντικειμένων σε TreeView(WPF)

    Ευχαριστώ πολύ για τις πληροφορίες αλλά όπως πολύ σωστά κατάλαβες δεν έχω ιδέα τι είναι το  Model-View-ViewModel pattern. Οπότε μήπως θα μπορούσες να μου πεις πως ακριβώς γίνεται το παρακάτω κομμάτι που μου έδωσες; Ο κώδικας είναι ΧΑΜL. 

    ¨Για να ελέγξεις το collapse από τον κώδικα, θα πρέπει να χρησιμοποιήσεις Data binding και να συνδέσεις το IsExpanded property με κάποιο boolean property στο ViewModel σου. Θα πρέπει επίσης να φροντίσεις το ViewModel σου να υλοποιεί το interface INotifyPropertyChange για να ειδοποιήσει το View ότι κάτι άλλαξε και να γίνει το αντίστοιχο refresh. ¨
Προβολή Τροφοδοσίας RSS με μορφή XML
Με χρήση του Community Server (Commercial Edition), από την Telligent Systems