WPF, плохая практика ставить код сразу после InitializeComponent? - PullRequest
2 голосов
/ 31 октября 2009

Мне было просто интересно. У меня есть фрейм, который загружает страницы, и в настоящее время у каждой страницы есть метод Page_Loaded, который будет запускаться при каждом доступе к странице. Это прекрасно работает, но я замечаю ошибки, если использую навигацию для перехода на ранее посещенные страницы. По возвращении на страницу снова вызывается Page_Loaded, чего я не хочу.

Используя отладку, я заметил, что InitializeComponent вызывался только при первой реализации страницы, и задавался вопросом, могу ли я просто поставить свой код Page_Loaded после этого вызова следующим образом:

public partial class MyPage: Page
{
    public MyPage()
    {
        InitializeComponent();
        //======> To Here
    }

    private void Page_Loaded(object sender, RoutedEventArgs e)
    {
       //Put Code from here <======
    }
}

Это решило бы мою проблему, но это плохая практика? И если да, то с какими проблемами я могу столкнуться в будущем?

Спасибо, Кохан

Ответы [ 2 ]

5 голосов
/ 31 октября 2009

Допустимо что-то делать в конструкторе. Я думаю, что это хорошо.

WPF не совсем похож на ASP.NET с точки зрения доступности объектов / и т. Д. Он немного слабее, и поэтому выполнение чего-либо в конструкторе не означает «нет-нет» в ASP.NET.

1 голос
/ 31 октября 2009

Как вы указали, событие Page_Loaded будет запускаться каждый раз при обновлении страницы, поэтому, если вы хотите, чтобы код выполнялся только один раз, то размещение его в конструкторе является логическим местом.

В зависимости от того, сколько кода вам нужно, вы можете рассмотреть возможность рефакторинга его в другой метод - но это вопрос исключительно личного вкуса (или, возможно, следования стандартам кодирования).

UPDATE

Я бы предположил, что, поскольку запрос, используемый для генерации tehBuildings, возвращает ноль (с указанием очевидного), то есть еще какой-то код, который нужно вызвать перед вызовом getBuildings. Не видя ваш оригинальный код, я бы не хотел сказать, чего сейчас не хватает.

...