2010-01-11 9 views
5

Dans mon code XAML, je déclare une instance d'une classe appelée DataConnection, l'instance s'appelle MyConnection.Accéder à l'objet instancié XAML à partir de C#

<Window.Resources> 
     <!-- Create an instance of the DataConnection class called MyConnection --> 
     <!-- The TimeTracker bit comes from the xmlns above --> 
     <TimeTracker:DataConnection x:Key="MyConnection" /> 
     <!-- Define the method which is invoked to obtain our data --> 
     <ObjectDataProvider x:Key="Time" ObjectInstance="{StaticResource ResourceKey=MyConnection}" MethodName="GetTimes" /> 
     <ObjectDataProvider x:Key="Clients" ObjectInstance="{StaticResource ResourceKey=MyConnection}" MethodName="GetClients" /> 
</Window.Resources> 

Tout dans la partie XAML fonctionne correctement. Ce que je veux, c'est pouvoir référencer mon instance de MyConnection depuis mon code C#.

Comment est-ce possible?

Répondre

5

Appelez FindResource("MyConnection") (docs). Vous devez le convertir en type spécifique, car les ressources peuvent être n'importe quel type d'objet.

Il existe également une méthode TryFindResource pour les cas où vous n'êtes pas sûr que la ressource existera ou non.

5

FindResource recherchera le dictionnaire de ressources de l'élément ainsi que les dictionnaires de ressources des éléments parents et les ressources de l'application. ["MyConnection"] recherchera uniquement le dictionnaire de ressources de cet élément

void Window_Loaded(object sender, RoutedEventArgs args) { 
    DataConnection dc1 = this.FindResource("MyConnection") as DataConnection; 
    DataConnection dc2 = this.Resources["MyConnection"] as DataConnection; 
} 

La documentation recommande la première approche pour les recherches de ressources normales mais fournit la seconde approche lorsque vous récupérez des ressources à partir d'un « emplacement de dictionnaire de ressources connue ... pour éviter les conséquences sur les performances et la portée possibles de l'exécution recherche de clé. " link

Questions connexes