2 votes

WPF, Mauvaise pratique de placer du code directement après InitializeComponent?

Je me demandais juste quelque chose. J'ai un cadre qui charge des pages et actuellement chaque page a une méthode Page_Loaded qui s'exécute à chaque fois que la page est consultée. Cela fonctionne très bien, mais je remarque des erreurs si j'utilise la navigation pour retourner à des pages déjà visitées. En retournant sur une page, Page_Loaded est appelé à nouveau, ce que je ne veux pas.

En utilisant le débogage, j'ai remarqué que InitializeComponent n'était appelé que la première fois que la page est implémentée et je me demandais si je pouvais simplement mettre mon code Page_Loaded après cet appel comme ceci :

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

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

Cela résoudrait mon problème, mais est-ce une mauvaise pratique ? Et dans ce cas, quels problèmes pourrais-je rencontrer à l'avenir ?

Merci, Kohan

5voto

Anderson Imes Points 18093

Il est légitime de faire quelque chose dans le constructeur. Je pense que c'est bien.

WPF n'est pas tout à fait comme ASP.NET en termes d'accessibilité des objets, etc. C'est un peu plus souple et donc faire quelque chose dans un constructeur n'est pas le non-non que c'est dans ASP.NET.

1voto

ChrisF Points 74295

Comme vous l'avez souligné, l'événement Page_Loaded sera déclenché chaque fois que la page est actualisée, donc si vous voulez que le code ne soit exécuté qu'une fois, alors le mettre dans le constructeur est l'endroit logique.

En fonction de la quantité de code dont vous avez besoin, vous voudrez peut-être envisager de le refactoriser dans une autre méthode - mais c'est purement une question de goût personnel (ou peut-être suivre des normes de codage).

UPDATE

Je suppose que comme la requête utilisée pour générer tehBuildings renvoie null (en disant l'évidence), alors il y a un autre code que vous devez appeler avant d'appeler getBuildings. Sans voir votre code original, je ne voudrais pas dire ce qui manque maintenant.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X