Τι ακριβώς κάνει το 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