2010-01-11 50 views
5

Trong XAML của tôi, tôi khai báo một cá thể của một lớp có tên là DataConnection, cá thể được đặt tên là MyConnection.Truy cập đối tượng khởi tạo XAML từ 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> 

Mọi thứ trong phần XAML đều hoạt động tốt. Những gì tôi muốn là có thể tham chiếu đến trường hợp MyConnection của tôi từ mã C# của tôi.

Làm cách nào có thể?

Trả lời

5

Gọi FindResource("MyConnection") (docs). Bạn sẽ cần phải đưa nó vào loại cụ thể bởi vì tài nguyên có thể là bất kỳ loại đối tượng nào.

Ngoài ra còn có phương pháp TryFindResource cho các trường hợp bạn không chắc liệu tài nguyên đó có tồn tại hay không.

5

FindResource sẽ tìm kiếm từ điển tài nguyên của phần tử cũng như bất kỳ từ điển tài nguyên của phần tử gốc nào và tài nguyên ứng dụng.

Resources ["MyConnection"] sẽ chỉ tìm kiếm từ điển tài nguyên của phần tử đó.

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

Các tài liệu khuyến cáo phương pháp đầu tiên để tra cứu tài nguyên thông thường nhưng cung cấp cách tiếp cận thứ hai khi bạn đang lấy nguồn từ một "biết vị trí từ điển tài nguyên ... để tránh việc thực hiện và phạm vi ảnh hưởng có thể có của thời gian chạy tra cứu chính. " link

Các vấn đề liên quan