在我的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中注册事件处理程序,以便在构造对象后触发事件时可以执行必要的工作?
(或许我完全走错了路?感激地考虑其他想法。)
答案 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。