Galileo Computing < openbook > Galileo Computing - Professionelle Bücher. Auch für Einsteiger.
Professionelle Bücher. Auch für Einsteiger.

Inhaltsverzeichnis
Vorwort zur 6. Auflage
1 Allgemeine Einführung in .NET
2 Grundlagen der Sprache C#
3 Das Klassendesign
4 Vererbung, Polymorphie und Interfaces
5 Delegates und Ereignisse
6 Strukturen und Enumerationen
7 Fehlerbehandlung und Debugging
8 Auflistungsklassen (Collections)
9 Generics – Generische Datentypen
10 Weitere C#-Sprachfeatures
11 LINQ
12 Arbeiten mit Dateien und Streams
13 Binäre Serialisierung
14 XML
15 Multithreading und die Task Parallel Library (TPL)
16 Einige wichtige .NET-Klassen
17 Projektmanagement und Visual Studio 2012
18 Einführung in die WPF und XAML
19 WPF-Layout-Container
20 Fenster in der WPF
21 WPF-Steuerelemente
22 Elementbindungen
23 Konzepte von WPF
24 Datenbindung
25 Weitere Möglichkeiten der Datenbindung
26 Dependency Properties
27 Ereignisse in der WPF
28 WPF-Commands
29 Benutzerdefinierte Controls
30 2D-Grafik
31 ADO.NET – Verbindungsorientierte Objekte
32 ADO.NET – Das Command-Objekt
33 ADO.NET – Der SqlDataAdapter
34 ADO.NET – Daten im lokalen Speicher
35 ADO.NET – Aktualisieren der Datenbank
36 Stark typisierte DataSets
37 Einführung in das ADO.NET Entity Framework
38 Datenabfragen des Entity Data Models (EDM)
39 Entitätsaktualisierung und Zustandsverwaltung
40 Konflikte behandeln
41 Plain Old CLR Objects (POCOs)
Stichwort

Download:
- Beispiele, ca. 62,4 MB

Buch bestellen
Ihre Meinung?

Spacer
Visual C# 2012 von Andreas Kühnel
Das umfassende Handbuch
Buch: Visual C# 2012

Visual C# 2012
Rheinwerk Computing
1402 S., 6., aktualisierte und erweiterte Auflage 2013, geb., mit DVD
49,90 Euro, ISBN 978-3-8362-1997-6
Pfeil 20 Fenster in der WPF
Pfeil 20.1 Hosts der WPF
Pfeil 20.2 Fenster vom Typ »Window«
Pfeil 20.2.1 Mehrere Fenster in einer Anwendung
Pfeil 20.3 Fenster vom Typ »NavigationWindow«
Pfeil 20.3.1 Das »Page«-Element
Pfeil 20.4 Hosts vom Typ »Frame«
Pfeil 20.5 Navigation zwischen den Seiten
Pfeil 20.5.1 Navigation mit »HyperLink«
Pfeil 20.5.2 Der Verlauf der Navigation – das Journal
Pfeil 20.5.3 Navigation mit »NavigationService«
Pfeil 20.5.4 Navigation im Internet
Pfeil 20.5.5 Navigieren mit dem Ereignis »RequestNavigate« des »HyperLink«-Elements
Pfeil 20.6 Datenübergabe zwischen den Seiten
Pfeil 20.6.1 Datenübergabe mit der Methode »Navigate«
Pfeil 20.7 Nachrichtenfenster mit »MessageBox«
Pfeil 20.7.1 Die Methode »MessageBox.Show«

Galileo Computing - Zum Seitenanfang

20.6 Datenübergabe zwischen den SeitenZur nächsten Überschrift

Daten von einer Seite an eine andere zu übergeben stellt grundsätzlich kein Problem dar. Wir benötigen dazu nur einen parametrisierten Konstruktor. Allerdings müssen wir dann auch Programmcode schreiben, da der Aufruf eines parametrisierten Konstruktors aus XAML-Code heraus nicht möglich ist. Zur Vorbereitung muss nur der Konstruktor der betreffenden Seite überladen werden, z. B.:

public partial class Page2 : Page {
public int Value { get; set; }
public Page2() {
InitializeComponent();
}

public Page2(int param) : this() {
Value = value;
}
}

Listing 20.18 Parametrisierter Konstruktor einer »Page«

Sie dürfen dabei nicht vergessen, den Aufruf des parametrisierten Konstruktors an den parameterlosen weiterzuleiten, in dem die Methode InitializeComponent dafür sorgt, die Seite mit den gewünschten Steuerelementen auszustatten. Natürlich kann InitializeComponent auch direkt im parametrisierten Konstruktor angegeben werden. Vergessen Sie jedoch den Aufruf der Methode, zeigt Ihre Seite keine Steuerelemente an und bleibt leer.

Die Übergabe von Daten beim Aufruf der neuen Seite bedarf nun keiner besonderen Erklärung mehr. Der Code könnte zum Beispiel lauten:

NavigationService.Navigate(new Page2(20));

Galileo Computing - Zum Seitenanfang

20.6.1 Datenübergabe mit der Methode »Navigate«Zur vorigen Überschrift

Eine andere Alternative bietet die Methode Navigate. Wir haben diese Methode bisher immer nur in ihrer einfachsten, parameterlosen Form benutzt, aber die Überladungen gestatten auch die Übergabe eines Arguments vom Typ Object. Der aufgerufenen Seite wird der Übergabewert in der Eigenschaft ExtraData des EventArgs-Parameters des Ereignisses LoadCompleted zur Verfügung gestellt.

Was sich im ersten Moment noch sehr einfach anhört, wird sich schnell als Hürde erweisen. Das Problem dabei ist die Registrierung des Ereignishandlers für das Ereignis LoadCompleted des NavigationService-Objekts. Stellen wir uns dazu vor, wir würden beabsichtigen, mit der parametrisierten Navigate-Methode von Page1 zu Page2 zu navigieren. Dazu muss der Ereignishandler für LoadCompleted des NavigationService-Objekts des Hosts in der Page2 registriert werden. Erst dann kann Page2 von den Informationen des EventArgs-Objekts profitieren. Allerdings stellt sich die Frage, wo die Registrierung des Ereignishandlers programmiert werden soll. Prinzipiell würden sich zwei Ereignisse der Seite anbieten: Initialized und Loaded. Jetzt kommt der Haken: Im Initialized-Event hat die Eigenschaft NavigationService der Seite noch den Wert null. Wird das Ereignis Loaded der Seite ausgelöst, hat das NavigationService-Objekt seinerseits bereits das Ereignis LoadCompleted ausgelöst. Mit anderen Worten: Das Ereignis Initialized kommt zu früh, Loaded zu spät.

Die Lösung dieses Dilemmas ist in einer zusätzlichen Methode zu finden, die von der aufgerufenen Seite bereitgestellt werden muss. Im folgenden Beispielprogramm, das die beiden Seiten Page1 und Page2 enthält, wird der Ablauf verdeutlicht. In Page1 befindet sich ein Button, von dem aus zur Page2 navigiert wird. Dabei wird der Inhalt der in Page1 befindlichen TextBox an die zweite Seite weitergeleitet (siehe auch Abbildung 20.4). Sehen wir uns aber zuerst das komplette Listing an.

// Beispiel: ..\Kapitel 20\NavigationSample

<NavigationWindow ...
Title="MainWindow" Height="200" Width="300"
Source="Page1.xaml">
</NavigationWindow>


<!-- Page1 -->

<Page ...
WindowTitle="Seite 1"
Title="Page1" WindowHeight="200">
<StackPanel>
<TextBox Name="TextBox1" ...></TextBox>
<Button Name="Button1" Click="Button1_Click" ...>
Zur Seite 2 navigieren
</Button>
</StackPanel>
</Page>


<!—Page2 -->

<Page ...
WindowTitle="Seite 2"
Title="Page2" WindowHeight="150">
<StackPanel>
<TextBox Name="TextBox1" ...></TextBox>
</StackPanel>
</Page>


// Code in Page1

public partial class Page1 : Page {
private void Button1_Click(object sender, RoutedEventArgs e) {
Page2 page = new Page2();
NavigationService nav = NavigationService.GetNavigationService(this);
page.SetLoadCompletedHandler(nav);
nav.Navigate(page,TextBox1.Text);
}
}

// Code in Page2

public partial class Page2 : Page {
public void SetLoadCompletedHandler(NavigationService nav) {
nav.LoadCompleted += new LoadCompletedEventHandler(nav_LoadCompleted);
}

void nav_LoadCompleted(object sender, NavigationEventArgs e) {
if (e.ExtraData != null && (e.ExtraData is String))
TextBox1.Text = (string)e.ExtraData;
this.NavigationService.LoadCompleted -= nav_LoadCompleted;
}
}

Listing 20.19 Das Beispielprogramm »NavigationSample«

Abbildung

Abbildung 20.4 Ausgabe des Beispielprogramms »NavigationSample«

Betrachten wir zuerst den Code in Page2. Die Seite stellt mit SetLoadCompletedHandler eine öffentliche Methode zur Verfügung, in der das Ereignis LoadCompleted registriert wird. Im Ereignishandler erfolgt die Auswertung der übermittelten Daten, die von der Eigenschaft ExtraData des NavigationEventArgs-Objekts bereitgestellt werden. Nach der notwendigen Überprüfung, ob die Daten von null abweichen und ob es sich um Daten vom Typ String handelt, wird der Übergabewert nach vorhergehender Typkonvertierung in die TextBox der Page2 eingetragen. Danach sollte die Registrierung des Ereignishandlers in jedem Fall wieder aufgehoben werden.

In Page1 wird nach der Instanziierung der Klasse Page2 die Methode SetLoadCompletedHandler aufgerufen und das NavigationService-Objekt als Argument übergeben. Damit sind alle vorbereitenden Maßnahmen getroffen, und die Navigate-Methode kann unter Übergabe des Inhalts der TextBox in Page1 aufgerufen werden.



Ihr Kommentar

Wie hat Ihnen das <openbook> gefallen? Wir freuen uns immer über Ihre freundlichen und kritischen Rückmeldungen.

>> Zum Feedback-Formular
<< zurück
  Zum Katalog
Zum Katalog: Visual C# 2012

Visual C# 2012
Jetzt bestellen


 Ihre Meinung?
Wie hat Ihnen das <openbook> gefallen?
Ihre Meinung

 Buchempfehlungen
Zum Katalog: Professionell entwickeln mit Visual C# 2012






 Professionell
 entwickeln mit
 Visual C# 2012


Zum Katalog: Windows Presentation Foundation






 Windows Presentation
 Foundation


Zum Katalog: Schrödinger programmiert C++






 Schrödinger
 programmiert C++


Zum Katalog: C++ Handbuch






 C++ Handbuch


Zum Katalog: C/C++






 C/C++


 Shopping
Versandkostenfrei bestellen in Deutschland und Österreich
InfoInfo





Copyright © Rheinwerk Verlag GmbH 2013
Für Ihren privaten Gebrauch dürfen Sie die Online-Version natürlich ausdrucken. Ansonsten unterliegt das <openbook> denselben Bestimmungen, wie die gebundene Ausgabe: Das Werk einschließlich aller seiner Teile ist urheberrechtlich geschützt. Alle Rechte vorbehalten einschließlich der Vervielfältigung, Übersetzung, Mikroverfilmung sowie Einspeicherung und Verarbeitung in elektronischen Systemen.


[Rheinwerk Computing]

Rheinwerk Verlag GmbH, Rheinwerkallee 4, 53227 Bonn, Tel.: 0228.42150.0, Fax 0228.42150.77, service@rheinwerk-verlag.de