2009-03-16 20 views
7

私はXAMLの「ウィンドウロード」イベントによって呼び出されるメソッドWindow_Loaded()作成するコードの例を見た:XAML Window.Loadedによって呼び出されたメソッドでコードを実行する理由

<Window x:Class="TestModuleLoader.Window1" 
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
    Title="Window1" Height="300" Width="300" Loaded="Window_Loaded"> 
    <Grid> 
     ... 
    </Grid> 
</Window> 

しかし、背後にあるコードでは、コードは、コンストラクタとWindow_Loaded()方法の両方で働いていた:

using System.Windows; 

namespace TestModuleLoader 
{ 
    public partial class Window1 : Window 
    { 
     public Window1() 
     { 
      InitializeComponent(); 
     } 

     private void Window_Loaded(object sender, RoutedEventArgs e) 
     { 
      //what advantages do I have running code here? 
     } 
    } 
} 

これには利点がありますか?

ここでは、ASP.NETのように「」、「PostRender()」などのメソッドについて知っておくと便利な「ウィンドウロードサイクル」がありますか?

答えて

12

はい、ASP.NET同様、WPFコントロールにも同様のライフサイクルがあります。 WPFコントロールのライフサイクルは、基本的に初期化、ロード、およびアンロードされたイベント(その順番)を基本とするため、より簡単です。参照:

http://msdn.microsoft.com/en-us/library/ms754221.aspx

とマイクHillbergはinitalizedと、ロードされたイベント間の違いを証明する優れた記事があります。

http://blogs.msdn.com/mikehillberg/archive/2006/09/19/LoadedVsInitialized.aspx

+0

Mike Hillbergはブログで "使用するイベントが不明な場合は、もう読みたくないので、Loadedイベントを使用してください"と述べています。優れている、私は今WPFで少しオーバーロードされている気がして、それは私が今知る必要があるすべてです。リンクありがとう! –

+0

WPFは少し圧倒的に感じることができます。私は個人的に私が氷山の先端を見たように感じる。 – Razzie

3

優秀なリンク、Razzieを。

エドワード - Contrastorが常にWindow/Page/UserControlで呼び出された最初のメソッドであり、すべてのDependencyPropertiesが最終値に初期化されているとは限りません。また、construtructor内から仮想メソッドを呼び出すことはお勧めできません。

これに対して、Loadedイベントは、一般に、初期化プロセスの最後に呼び出されます。つまり、Window/Page/UserControlがWPF ElementTreeに完全にロードされたときです。ロードされたイベントの中から、予想外の結果を招くことなく確実に任意のメソッドを呼び出してDepenencyPropertyを変更することができます。

いいえパターン(私は現在私のプロジェクトで使用しています)は、ロードされたイベントでカスタム依存関係のプロパティを初期化することです初期化中に変更されていない場合。コントロールの場合、このパターンを使用すると、上書きされている(つまり、呼び出し元コードからのプロパティバインディングによって) "高価な"プロパティ(ObservableCollectionのDependencyPropertyなど)を初期化しないようにできます。

簡単な答え:コンストラクタを安全にオーバーロードする方法がわからない場合は、Loadedイベントを使用してください。

+0

素敵な要約:-) – Razzie

関連する問題