Frage

sah ich ein Codebeispiel, das ein Verfahren Window_Loaded() erzeugt, die durch XAML der „Window Loaded“ Ereignis aufgerufen wird:

<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>

Aber in dem Code hinter der Code arbeitete sowohl im Konstruktor und die Window_Loaded() Methode:

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? 
        }
    }
}

Gibt es irgendwelche Vorteile dies zu tun?

Gibt es ein „Fenster Ladezyklus“, wie er in ASP.NET geht hier vor, die hilfreich zu wissen, über, das heißt Methoden wie PreRender(), PostRender(), etc?

War es hilfreich?

Lösung

Ja, es gibt einen ähnlichen Lebenszyklus für WPF-Steuerelemente, wie in ASP.NET. Der Lebenszyklus von WPF-Steuerelemente ist aber einfacher, da es im Grunde eines initialisiert, geladen consits und entladen Ereignisses (in dieser Reihenfolge). Siehe auch:

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

und Mike Hillberg hat einen ausgezeichneten Artikel, den Unterschied zwischen den initialisiert und geladen Ereignisse zeigen:

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

Andere Tipps

Ausgezeichnete Verbindungen, Razzie.

Edward - Sie werden feststellen, dass der interessantesten Unterschied ist, dass der contructor wie immer die erste Methode aufgerufen, Ihre Fenster / Seite / Usercontrol und Sie können nicht auf allen DependencyProperties gezählt worden, um ihre endgültigen Werte initialisiert haben. Außerdem ist es krank alle virtuellen Methoden aus Ihrem construtructor anrufen beraten.

Das Loaded-Ereignis wird dagegen im Allgemeinen am Ende der Initialisierung Prozesse genannt wird ... das ist - wenn das Fenster / Seite / Usercontrol wurde in ein WPF ElementTree vollständig geladen. Aus Ihrer geladenen Veranstaltung können Sie getrost alle Methoden aufrufen und jede DepenencyProperty ohne Risiko unerwarteter Ergebnisse ändern.

Ein schönes Muster (die ich zur Zeit in meinem Projekt verwenden bin) ist, um benutzerdefinierte Abhängigkeitseigenschaften in dem Loaded-Ereignisse zu initialisieren , wenn sie nicht während der Initialisierung geändert. Für Kontrollen ermöglicht dieses Muster, das Sie initialisieren „teuer“ Eigenschaften zu vermeiden (wie ein DependencyProperty, die ein ObservableCollection ist), wenn sie überschrieben werden (das heißt durch eine Eigenschaft von der anrufenden Code Binding).

Einfache Antwort: Verwenden Sie das Loaded-Ereignis, wenn Sie nicht sicher sind, wie sicher an den Konstruktor überlastet

.
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top