WPF,在InitializeComponent之后直接放置代码的不良做法?

时间:2009-10-31 14:13:14

标签: c# wpf coding-style

我只是在想什么。我有一个加载页面的框架,目前每个页面都有一个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 个答案:

答案 0 :(得分:5)

在构造函数中执行某些操作是合法的。我认为这很好。

WPF在对象/等的可访问性方面不太像ASP.NET。它有点宽松,所以在构造函数中做某事并不是引用它在ASP.NET中的禁忌。

答案 1 :(得分:1)

正如您所指出的,每次刷新页面时都会触发Page_Loaded事件,因此如果您希望代码只执行一次,那么将它放在构造函数中就是合乎逻辑的位置。

根据您需要多少代码,您可能需要考虑将其重构为另一种方法 - 但这纯粹是个人品味(或者可能遵循编码标准)。

<强>更新

我猜想,因为用于生成tehBuildings的查询返回null(说明显而易见),然后在调用getBuildings之前需要调用其他一些代码。在没有看到原始代码的情况下,我不想说现在缺少什么。