2010-01-11 8 views
5

W moim XAML deklaruję wystąpienie klasy o nazwie DataConnection, instancja nosi nazwę MyConnection.Dostęp do obiektu utworzonego przez XAML z 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> 

Wszystko w części XAML działa poprawnie. To, czego chcę, to móc odwoływać się do mojego wystąpienia MyConnection z mojego kodu C#.

Jak to możliwe?

Odpowiedz

5

Zadzwoń pod FindResource("MyConnection") (docs). Musisz rzucić go do określonego typu, ponieważ zasoby mogą być dowolnym obiektem.

Istnieje również metoda TryFindResource dla przypadków, gdy nie masz pewności, czy zasób będzie istnieć, czy nie.

5

FindResource przeszukuje słownik zasobów elementu, jak również słowniki zasobów elementów nadrzędnych i zasoby aplikacji.

Resources ["MyConnection"] przeszuka tylko słownik zasobów tego elementu.

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

Dokumentacja zaleca pierwsze podejście do normalnych wyszukiwań zasobów ale zapewnia drugie podejście do podczas pobierania zasobów z „znanej lokalizacji słowniku zasobami ... aby uniknąć możliwych wydajność i zakres implikacji czasie wykonywania wyszukiwanie klucza. " link

Powiązane problemy