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

 

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

Silverlight x:Name πρόβλημα

Îåêßíçóå áðü ôï ìÝëïò tsavos. Τελευταία δημοσίευση από το μέλος tsavos στις 19-10-2010, 17:44. Υπάρχουν 2 απαντήσεις.
Ταξινόμηση Δημοσιεύσεων: Προηγούμενο Επόμενο
  •  18-10-2010, 00:45 60613

    Silverlight x:Name πρόβλημα

    Τι ακριβώς κάνει το x:Name στην δηλωση των Resources μιας silverlight σελίδας?

    Σύμφωνα με το http://msdn.microsoft.com/en-us/library/cc189028%28v=VS.95%29.aspx
    "Uniquely identifies object elements for access to the instantiated object from code-behind or general code. Once applied to a backing programming model, x:Name can be considered equivalent to the variable holding an object reference, as returned by a constructor."

    Η απορία μου υπάρχει γιατί σε μια εφορμογή silverlight χτισμένη με MVVM κάνω τα παρακάτω:
    1. Έχω φτιάξει το ViewModel.

    2. To δηλώνω μέσα στα Resources της σελίδας
    <IsotrackCli_ViewModel:E5DelvsViewModel x:Key="E5DelvsViewModelDataSourceKey" x:Name="E5DelvsViewModelDataSourceName" d:IsDataSource="True"/>

    3. To κάνω bind στο grid και όλα παίζουν μια χαρά.

    Στην συνέχεια,

    το παρακάτω χτυπάει "Object reference not set to an instance of an object"
    E5DelvsViewModelDataSourceName.getE5forProjIDWeekID(selRow.ProjectID, selRow.E5WeekID);
    γιατί το E5DelvsViewModelDataSourceName είναι null,

    αλλά το παρακάτω παίζει κανονικά:
    ((E5DelvsViewModel)this.Resources["E5DelvsViewModelDataSourceKey"]).getE5forProjIDWeekID(selRow.ProjectID, selRow.E5WeekID);

    To ερώτημα είναι :
    Τελικά το x:Name δεν είναι το όνομα του instance της κλάσης? Aν ναί γιατί δεν παίζει αφού η κλάση έχει αρχικοποιηθεί και έχει ήδη επιστρέψει δεδομένα που έχουν γίνει bind στο grid ? Γιατί είναι null ?
    Και γιατί παίζει ο 2ος τρόπος ?
    Σημ: Δεν με πειράζει η 2η υλοποίηση απλά δεν έχει intellisence.

    Harry Tsavdaris
  •  18-10-2010, 11:14 60616 σε απάντηση της 60613

    Απ: Silverlight x:Name πρόβλημα

    Αυτό που περιγράφεις συμβαίνει γιατί έχεις φτιάξει μεν το instance, ωστόσο αυτό βρίσκεται μέσα στα resources. Δεν υπάρχει μέσα στο UserControl ή το Window όπως υπάρχει ένα Button ή ένα TextBox. Άρα θα πρέπει να το "τραβήξεις" μέσα από τα resources και μετά να το χρησιμοποιήσεις.

    Μπορείς στον constructor, μετά το InitializeComponent(), να πάρεις ως ref το instance από τα resources και να το αναθέσεις σε μια μεταβλητή σε επίπεδο κλάσης για να το χρησιμοποιείς όπου σου χρειαστεί, ωστόσο τυπικά κάτι τέτοιο δεν θα σου χρειαστεί καθώς παίζεις με MVVM. Παρατηρώ στον κώδικα που παραθέτεις ότι αναφέρεσαι σε κάποιο κελί του grid. Στην MVVM υλοποίηση δεν συναντάται κάτι τέτοιο, άρα ή κάτι δεν κάνεις καλά ή κάπου παραβιάζεις το MVVM για να πετύχεις κάτι που δεν μπορείς να πετύχεις με τον κλασικό MVVM τρόπο;

     


     

     

    Vir prudens non contra ventum mingit
  •  19-10-2010, 17:44 60634 σε απάντηση της 60616

    Απ: Silverlight x:Name πρόβλημα

    Eυχαριστώ για την απάντηση. Ναι τελικά παραβίασα το MVVM γιατί τα commands δεν μου έπαιζαν σωστά -με τo συγκεκριμένο UI lib- και κάπου το γύρισα σε code-behind. 
    Harry Tsavdaris
Προβολή Τροφοδοσίας RSS με μορφή XML
Με χρήση του Community Server (Commercial Edition), από την Telligent Systems