在WPF / XAML中正确加载Application.Resources

时间:2011-03-30 20:13:32

标签: c# wpf xaml

在我的WPF应用程序中,我指定了一个Application.Resource,如下所示:

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

我有一个类MyData,它目前在其构造函数中完成所有初始化(包括从文件加载数据)。我认为这是一个糟糕的形式,因为我来自C ++背景,其中构造函数应该保持最小。

我怀疑我希望MyData类侦听一个事件,比如“AfterResourcesLoaded”,但我在搜索MSDN时找不到任何相关描述。

  • 我是对的,在构造函数中做太多工作是C#中的错误形式,就像在C ++中一样?或者在构造函数中做大量工作是否可以接受?

  • 如何在XAML中的MyData中注册事件处理程序,以便在构造对象后触发事件时可以执行必要的工作?

(或许我完全走错了路?感激地考虑其他想法。)

2 个答案:

答案 0 :(得分:2)

在C#和C ++中,在类的构造函数中做太多工作也是一个坏主意(主要是因为对于类的用户来说这并不明显)。

您可以做的是首次访问时触发数据加载(例如,在MyData类的属性获取器中)或通过提供显式方法(例如LoadData )可以在Application.Startup事件处理程序中调用。像这样:

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

       MyData data = FindResource("MyData");

       data.LoadData();       
   }
}

答案 1 :(得分:0)

假设MyData基本上是一个只保存数据的简单类,我将负责将MyData加载到另一个类中。另一个类可以在您的应用程序或Window的Loaded事件中保存MyData。