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

 

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

Master-Detail σενάριο: διαχείριση λίστας

Îåêßíçóå áðü ôï ìÝëïò Geysser. Τελευταία δημοσίευση από το μέλος Geysser στις 13-03-2012, 09:54. Υπάρχουν 4 απαντήσεις.
Ταξινόμηση Δημοσιεύσεων: Προηγούμενο Επόμενο
  •  12-03-2012, 15:08 69619

    Master-Detail σενάριο: διαχείριση λίστας

    Όταν έχεις ένα σενάριο με Master view και Details view, λογικό είναι να θες να διαχειρίζεσαι τις εγγραφές της λίστας στο Master: να προσθέτεις, να αλλάζεις, να διαγράφεις κλπ. Κοιτάξτε εδώ λοιπόν τι συμβαίνει:
    Στο Master view υπάρχει ένα ListView με GridView, που γίνεται bind σε μια ωραία ObservableCollection. Σ'αυτό δεν φαίνονται όλες οι ιδιότητες (θα'ναι καμιά τριανταριά) αλλά μερικές μόνο.
    Υπάρχουν δυο κουμπιά - και κάποια άλλα, αλλά δεν μας απασχολούν προς το παρόν - , Add και Edit, τα οποία κάνουν bind σε αντίστοιχες commands. Η κάθε command σηκώνει ένα event - μην ανατριχιάζετε, και τα events έχουν ψυχή! - των οποίων οι handlers βρίσκονται στο code behind της Master View.
    To Details view έχει δύο κουμπιά , OK και Cancel, τα οποία, μέσω commands και πάλι, ρίχνουν αντίστοιχα events και επιστρέφουν το DialogResult της Details view.
    Μέχρις εδώ,θαυμάσια. Το Add δουλεύει μια χαρά: ανοίγει το παράθυρο, κάνω τα δικά μου και, με το που πατήσω ΟΚ, κλείνει το παράθυρο και περνάει μια καινούρια γραμμή στο ListView.
    To Edit όμως μου τα χαλάει. Όταν ανοίγει το παράθυρο και κάνω μια αλλαγή, την βλέπω κατευθείαν στο ListView από πίσω, και το κουμπί OK δεν κάνει τίποτα.

    Σας κούρασα και συγνώμη. Αλλά, μπορεί κάποιο καλό παιδί να μου εξηγήσει, με όσο πιο απλό τρόπο γίνεται, γιατί συμβαίνει αυτό και πως να το λύσω;
  •  12-03-2012, 18:33 69621 σε απάντηση της 69619

    Απ: Master-Detail σενάριο: διαχείριση λίστας

    Δεν έχω καταλάβει εντελώς την ερώτηση, αλλά κάνεις binding του ίδιου object σε δύο φόρμες;

    Ακόμα κι ένας άνθρωπος μπορεί ν' αλλάξει τον κόσμο. Μη θέλεις να κυβερνήσεις. Απλά δείξε το μονοπάτι κι ο κόσμος θ' ακολουθήσει!!
  •  13-03-2012, 00:40 69626 σε απάντηση της 69621

    Απ: Master-Detail σενάριο: διαχείριση λίστας

    Κοντά έπεσες. Περνάω το selected item σε μια μεταβλητή του ίδιου τύπου, την οποία μετά περνάω στο ViewModel της καινούριας φόρμας Detail. 

    Αρχίζω με
    MemberViewModel vm=new MemberViewModel();
    και στο Initialize() της Master φόρμας δίνω

    vm.AddEvent+=new EventHandler(vm_AddEvent);
    this.DataContext=vm;

    Το handler έχει ως εξής:
    private void vm_AddEvent(Object sender,EventArgs e)
    {
          DetailsDialog dlg=new DetailsDialog();	//Δημιουργώ ένα καινούριο παράθυρο
          Member m=vm.MemberList[vm.SelectedIndex];	//Παίρνω το επιλεγμένο Member
          Member m2=new Member();			//Δημιουργώ ένα καινούριο Member
    //Και εδώ είναι το θέμα. Αν δώσω m2=m, στην ουσία περνάω το m και όχι //ένα καινούριο Member με τις ίδιες values στις ιδιότητές του. Αν κάτσω να αντιγράψω //μια προς μια τις properties, την έκατσα γιατί είναι ένα κατεβατό. Ίσως reflection? //Αν λυθεί αυτό περνάω το καινούριο Member στο ViewModel του παραθύρου (dlg.DataContext as MemberViewModel).MyMember=m2; //και μετά... Boolean? b=dlg.ShowDialog(); if (b==true) { m=m2; } }

    Το ερώτημα είναι γιατί το κουμπί OK δεν σηκώνει το event. Σε κάποιο άλλο φόρουμ κάποιος μου είπε για IEditableObject αλλά μήτε που ξέρω πως να το χρησιμοποιήσω.
  •  13-03-2012, 02:55 69627 σε απάντηση της 69626

    Απ: Master-Detail σενάριο: διαχείριση λίστας

    Ρίξε μια ματιά σ' αυτό το άρθο. Προτείνει την ύπαρξη ενός Cancel button που εκτελεί μια Cancel Command αν δε θέλουμε να σώσουμε τις αλλαγές. Τις original τιμές τις παίρνεις καλώντας την MemberwiseClone() (shalow copy). Νομίζω ότι σαν πρόταση είναι καλύτερη.

    Ακόμα κι ένας άνθρωπος μπορεί ν' αλλάξει τον κόσμο. Μη θέλεις να κυβερνήσεις. Απλά δείξε το μονοπάτι κι ο κόσμος θ' ακολουθήσει!!
  •  13-03-2012, 09:54 69629 σε απάντηση της 69627

    Απ: Master-Detail σενάριο: διαχείριση λίστας

    Φαίνεται ενδιαφερον. Για να τω ξεκοκκαλίσω λίγο...
Προβολή Τροφοδοσίας RSS με μορφή XML
Με χρήση του Community Server (Commercial Edition), από την Telligent Systems