Загрузка приложения. Ресурсы правильно в WPF / XAML - PullRequest
1 голос
/ 31 марта 2011

В моем приложении WPF я указываю Application.Resource, как показано здесь:

<Application x:Class="MyApp" [...]>
    <Application.Resources>
        <local:MyData x:Key="MyData">
    </Application.Resources>
</Application>

У меня есть класс MyData, который в настоящее время выполняет всю свою инициализацию (включая загрузку данных из файла).) в своем конструкторе.Я считаю это плохой формой, так как я пришел из C ++ фона, где конструкторы должны быть минимальными.

Я подозреваю, что хочу, чтобы класс MyData прослушивал событие, что-то вроде "AfterResourcesLoaded", но яЯ не смог найти какое-либо описание этого при поиске в MSDN.

  • Прав ли я, что слишком много работы в конструкторе - это дурной тон в C #, как и в C ++?Или допустимо выполнять значительную работу в конструкторе?

  • Как зарегистрировать обработчик событий в MyData в XAML, чтобы я мог выполнять необходимую работу, когда событиесработало, после того, как объект был построен?

(или, может быть, я полностью на неправильном пути? С благодарностью рассмотрены альтернативные идеи.)

Ответы [ 2 ]

2 голосов
/ 31 марта 2011

Выполнение слишком большого количества работы в конструкторе класса также является плохой идеей в C # и в C ++ (главным образом потому, что это не очевидно для пользователей класса).

Что вы можете сделать, это запустить загрузку данных при первом обращении к ним (например, в модуле получения свойств класса MyData) или предоставить явный метод (например, LoadData), который может быть вызывается в обработчике события Application.Startup. Как то так:

public class MyApp : Application
{
   public override OnStartup(EventArgs e)
   {
       base.OnStartup(e);

       MyData data = FindResource("MyData");

       data.LoadData();       
   }
}
0 голосов
/ 31 марта 2011

Предполагая, что MyData - это простой класс, который просто хранит данные, я бы перенес ответственность за загрузку MyData из себя в другой класс. Другой класс может гидратировать MyData в вашем приложении или событие Loaded Windows.

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