2011-03-30 45 views
1

在我的WPF应用程序,我指定Application.Resource,在这里:加载Application.Resources正确的WPF/XAML如图

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

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

我怀疑我希望MyData类监听某个事件,比如“AfterResourcesLoaded”,但我在搜索MSDN中找不到任何这样的描述。

  • 我是对的,在构造函数中做太多的工作是C#中的错误形式,因为它在C++中?还是可以接受在构造函数中做重要的工作?

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

(也许我是在错误的轨道完全?另类的想法感激审议。)

回答

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();  
    } 
} 
0

假设迈德特基本上是一个简单的类,只包含数据,我希望移居加载MyData的责任脱离自己,进入另一个阶级。另一个类可以在应用程序或Window's Loaded事件中为MyData提供保湿功能。