Доступ к экземпляру объекта XAML из C # - PullRequest
5 голосов
/ 11 января 2010

В моем XAML я объявляю экземпляр класса с именем DataConnection, экземпляр называется MyConnection.

<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>

Все в части XAML работает нормально. Я хочу иметь возможность ссылаться на мой экземпляр MyConnection из моего кода C #.

Как это возможно?

Ответы [ 2 ]

5 голосов
/ 11 января 2010

FindResource будет искать словарь ресурсов элемента, а также словари ресурсов любых родительских элементов и ресурсы приложения.

Resources ["MyConnection"] будет искать только словарь ресурсов этого элемента.

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

Документация рекомендует первый подход для обычного поиска ресурсов, но предоставляет второй подход, когда вы извлекаете ресурсы из «известного расположения словаря ресурсов ... чтобы избежать возможных последствий для производительности и области поиска ключа времени выполнения». ссылка

5 голосов
/ 11 января 2010

Звоните FindResource("MyConnection") ( документы ). Вам нужно привести его к определенному типу, поскольку ресурсы могут быть объектами любого типа.

Существует также метод TryFindResource для случаев, когда вы не уверены, существует ли ресурс или нет.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...