.NET Blog   ·   .NET Casts   ·   .NET GUI Foren   ·   .NET BlogBook   ·   WPF Blogger   ·   visual studio one   ·   ASP.NET professional

  • ACHTUNG - NEUES BLOG

    Ab sofort steht unter http://devtyr.norberteder.com mein neues Blog zur Verfügung. Dieses Blog wird nicht weiter betreut, bleibt aber erhalten. Neue Eintr%auml;ge erfolgen nur mehr im neuen Blog. Kommentare werden ebenfalls nicht mehr behandelt. Wer weiterhin meinen Einträgen und Aktivitäten folgen möchte, möge bitte RSS-Feeds, Verlinkungen etc. an die neue Location anpassen.
Download .NET Essentials Installer
Trickkiste

Der direkte Draht

19.07.08 - Internet, Community
Beitrag von Norbert Eder
 Da gerade der direkte Draht in der Community ein sehr wichtiger Bestandteil ist, biete ich ab sofort die Möglichkeit an, direkt über mein Blog mit mir in Kontakt zu treten.

Über den Button



gelangt ihr auf eine Unterseite, über der ihr mir MSN-Messages senden könnt. Dazu muss nur ein CAPTCHA eingegeben werden und los geht's - vorausgesetzt ich bin online.

PS: Auch andere bieten diese Möglichkeit an, Dariusz zum Beispiel.

Für die nächste Zeit wird dieses Feature testhalber angeboten. Abhängig davon, wie sinnvoll es genutzt wird, werde ich es weiterführen oder nicht. Die Zeit wird's zeigen.

Ich gebe jedoch gleich jetzt zu bedenken, dass die Antworten abhängig von der Komplextität sind, als auch meiner verfügbaren Zeit, die unter Tags sehr eingeschränkt ist - es müssen ja auch Brötchen verdient werden. Bei komplexeren Anfragen ist vermutlich eine Email als sinnvoller zu sehen.

  Kommentar hinzufügen   |  1 Trackbacks   |  Permalink  |  Trackback-URL


Neue Ausgabe des .NET BlogBook verschoben

16.07.08 - Blog-Intern
Beitrag von Norbert Eder
 Für alle, die bereits nachgefragt (und diejenigen, die daran Interesse haben) haben, warum die neue Ausgabe des .NET BlogBook noch nicht erschienen ist, hier eine kleine Information diesbezüglich:

Es findet aktuell ein großer Umbau des .NET BlogBook statt, der leider (gepaart mit einigen anderen Dingen) einen recht großen Aufwand verursacht. Daher dauert die Veröffentlichung länger als gedacht. Zum aktuellen Zeitpunkt sieht es aus, als würde diese Ausgabe ausfallen und in der neuen Version erst zum nächsten Termin zur Verfügung stehen.

Es wird jedoch einen kompletten Relaunch geben und darauf darf man wirklich gespannt sein. Sehr viele Anregungen wurden und werden noch eingearbeitet um dieses Projekt weiter voran zu treiben.

Ich bitte hiermit um Verständnis und bitte zusätzlich auch weiter um euer Feedback. Es hilft dem Projekt wirklich sehr.

  Kommentar hinzufügen   |  0 Trackbacks   |  Permalink  |  Trackback-URL


WPF: Unterschied zwischen DataTemplate und ControlTemplate

14.07.08 - .NET, WPF
Beitrag von Norbert Eder
 Sehr oft wird in Foren bzw. per Email gefragt, wo denn genau der Unterschied zwischen einem DataTemplate und einem ControlTemplate liegt. Dies ist relativ einfach erklärt.

DataTemplate


Ein DataTemplate wird verwendet, um das Aussehen bzw. die Zusammensetzung eines Daten-Items zu beschreiben. D.h. darüber wird der Visual Tree eines Daten-Items definiert. Relevant ist dies bei Items für eine ListBox, ListView usw. Dabei kann es sich um eine Ableitung eines ListBoxItems (je nach Steuerelement) oder um eine CLR-Objekt handeln.

ControlTemplate


Ein ControlTemplate hingegen beschreibt den Visual Tree und damit den Aufbau eines Steuerelements.

Fazit


Sollen also Items einer "Auflistung" beschrieben werden, dann ist die Verwendung eines DataTemplates zielführend. Andernfalls ist ein ControlTemplate zu verwenden.

  1 Kommentar - 12450 mal angesehen   |  0 Trackbacks   |  Permalink  |  Trackback-URL


WPF: DataSet und Data Binding

09.07.08 - .NET, WPF
Beitrag von Norbert Eder
 Gerade zum Thema Data Binding habe ich mittlerweile einige Beispiele erstellt (siehe hier, hier und hier). Was noch fehlt (und oft gefragt wird) ist, wie ein DataSet gebunden werden kann. Dem möchte sich dieser Artikel widmen.

Auch in diesem Fall ändert sich relativ wenig. Anstatt eines konkreten Objektes steht nun ein DataSet zur Verfügung. Dieses kann Tabellen enthalten (0 - n) und jede Tabelle kann Spalten enthalten. Das Grundprinzip besteht nun einfach darin:

Vorgehensweise anhand einer TreeView


Das DataSet wird als DataContext bei der TreeView gesetzt. Das Root-Element wird beispielsweise per Hand (Markup) angelegt. Diesem wird nun eine Tabelle des DataSets als ItemsSource gesetzt. In weiterer Folge wird ein HierarchicalDataTemplate erstellt, welches nun dafür zuständig ist, die einzelnen Felder (oder auch nur ein paar wenige davon) darzustellen.

In weiterer Folge kann nun eine Eingabemaske erstellt werden, welche an das SelectedItem der TreeView gebunden ist und den ausgewählten Datensatz zur Anzeige bringt und somit bearbeitbar macht.

Konkretes Beispiel


Ob nun das DataSet aus einer Datenbank geladen oder manuell erstellt wird, macht keinen Unterschied. In diesem Beispiel wird ein DataSet per Code generiert und zur Verfügung gestellt:
public static class DataSetMock
{
    public static DataSet CreateDataSet()
    {
        DataSet ds = new DataSet();

        ds.Tables.Add("Person");

        ds.Tables[0].Columns.Add("FirstName");
        ds.Tables[0].Columns.Add("LastName");

        ds.Tables[0].Rows.Add("Norbert", "Eder");
        ds.Tables[0].Rows.Add("Hugo", "Tester");

        return ds;
    }
}

Dies geschieht in diesem Fall durch eine statische Klasse. Die Methode CreateDataSet kann nun über einen ObjectDataProvider via XAML zur Verfügung gestellt werden. Damit beschränken wir uns beim Schreiben von Sourcecode auf die Implementierung eben dieser statischen Klasse.

Wie bereits angesprochen, wird das DataSet in diesem Beispiel über ObjectDataProvider zur Verfügung gestellt:
<ObjectDataProvider 
    x:Key="PeopleProvider" 
    MethodName="CreateDataSet" 
    ObjectType="{x:Type local:DataSetMock}"/>

Der Provider selbst muss in den entsprechenden Ressourcen (in diesem Fall in den Ressourcen des Fensters) definiert werden.

In weiterer Folge wird nun ein TreeView-Element auf dem Fenster positioniert. Als DataContext wird der zuvor erstellte Provider gesetzt, da dieser die generierten Daten (DataSet) zurück liefert:
<TreeView 
    DataContext="{StaticResource PeopleProvider}" 
    x:Name="PeopleTreeView" 
    DockPanel.Dock="Left" 
    Width="200">
    <TreeViewItem 
        x:Name="PeopleRoot" 
        Header="People" 
        ItemsSource="{Binding Person}" 
        ItemTemplate="{StaticResource PersonTemplate}"/>
</TreeView>

Im Source ist zusätzlich zu sehen, dass eine Root-Node über das Markup erstellt wird. Diesem Root-Node wird als ItemsSource nun per Binding die Tabelle Person aus dem DataSet zugewiesen. Dadurch wird der Gültigkeitsbereich des Bindings für diese Node festgelegt. Somit kann nun ein ItemTemplate definiert werden, welches für die Darstellung der einzelnen Datensätze zuständig ist:
<HierarchicalDataTemplate x:Key="PersonTemplate">
    <StackPanel Orientation="Horizontal">
        <TextBlock Text="{Binding LastName}"/>
        <TextBlock Text=", "/>
        <TextBlock Text="{Binding FirstName}"/>
    </StackPanel>
</HierarchicalDataTemplate>

Dieses Template wird ebenfalls in den Ressourcen des Fensters abgelegt. Zusätzlich muss es der Root-Node als ItemTemplate zugewiesen werden.

Das wären bezüglich TreeView alle notwendigen Schritte. Möchte man nun ein Eingabeformular erstellen, welches die Daten des aktuell selektierten Datensatzes anzeigen soll, dann kann nun folgendes definiert werden:
<StackPanel Orientation="Vertical">
    <TextBlock Text="Firstname"/>
    <TextBox 
        Text="{Binding 
            ElementName=PeopleTreeView, 
            Path=SelectedItem.FirstName}"/>
    <TextBlock Text="Lastname"/>
    <TextBox 
        Text="{Binding 
            ElementName=PeopleTreeView, 
            Path=SelectedItem.LastName}"/>
</StackPanel> 

Was passiert hier? Es wird ein StackPanel definiert, welches alle Kind-Elemente untereinander anordnet. Die Elemente vom Typ TextBlock stellen die Überschriften dar. Für die eigentlichen Daten wird jeweils eine TextBox verwendet. Diese enthalten ein Binding auf die jeweilige Spalte des aktuell selektierten Datensatzes. Änderungen schlagen sich natürlich sofort auf die TreeView durch.

Fazit


Das Data Binding funktioniert grundsätzlich immer gleich. Wichtig ist, dass bewußt ist, wann welcher Kontext gesetzt wird und was dieser Kontext tatsächlich zur Verfügung stellt. Darauf kann gebunden werden. Dies verhält sich bei einem DataSet gleich wie bei einer Objekthierarchie.

Das gezeigte Beispiel steht natürlich als Download zur Verfügung.

  Kommentar hinzufügen   |  0 Trackbacks   |  Permalink  |  Trackback-URL


Sie wurden mit dem Microsoft MVP Award ausgezeichnet!

01.07.08 - Blog-Intern, .NET, WPF, Internet, Community
Beitrag von Norbert Eder
 Sehr geehrte(r) Norbert Eder,
Herzlichen Glückwunsch! Wir freuen uns, Ihnen den Microsoft® MVP Award 2008 verleihen zu können. Mit dem MVP Award danken wir Ihnen für Ihren Einsatz für die Community, mit dem Sie Tag für Tag dazu beitragen, das Leben der Menschen zu bereichern und die Branche erfolgreicher zu machen. Wir schätzen Ihren außerordentlich bedeutenden Beitrag in den technischen Communities zum Thema Microsoft Client App Dev im vergangenen Jahr hoch ein.


Tja, was soll ich sagen. Ich fühle mich geehrt und bedanke mich natürlich bei allen, die mich immer wieder unterstützen, die die Nominierung möglich gemacht haben und sowieso und überhaupt bin ich auch für Weltfrieden.

Mal sehen, ob die sich aufdrängende Frage auch noch irgendwie beantwortet wird ...

  23 Kommentare - 1504 mal angesehen   |  0 Trackbacks   |  Permalink  |  Trackback-URL


Aktualisiere mich!

01.07.08 - Blog-Intern
Beitrag von Norbert Eder
 DAS dachten sich die Bereiche Trickkiste und WPF. Diesem Ruf folgte ich und fand auch spontan Möglichkeiten der Verbesserung.

Die Trickkiste wurde um sämtliche WPF-Artikel erleichtert. Diese sind nunmehr zur Gänze im Bereich WPF zu finden. Eben dieser wurde zusätzlich um weitere Einträge ergänzt.

Im Laufe des aktuellen Monats werden sich ein paar weitere Dinge hier ändern.

  Kommentar hinzufügen   |  0 Trackbacks   |  Permalink  |  Trackback-URL


Artikel: Steuerelemente für jeden Zweck

30.06.08 - .NET, WPF
Beitrag von Norbert Eder
  In der aktuellen Ausgabe der visual studio one wurde mein Artikel Steuerelemente für jeden Zweck veröffentlicht.

Die Idee der Steuerelemente ist ja nicht neu. Relativ neu hingegen ist die Möglichkeit, grafische Elemente komplett von der eigentlichen Logik zu trennen – zumindest gilt dies für Microsoft-basierte Technologien.Mit der Windows Presentation Foundation wird den Entwicklern genau dies in die Hand gelegt. Sie als Entwickler und auch Ihr Kunde können davon profitieren. Dieser Artikel zeigt Ihnen, wie Sie dynamische WPF-Steuerelemente selber bauen können.

Link: visual studio one

  3 Kommentare - 903 mal angesehen   |  0 Trackbacks   |  Permalink  |  Trackback-URL


Diablo III - Offizielle Website online

28.06.08 - Internet
Beitrag von Norbert Eder
 Unter http://eu.blizzard.com/diablo3/ steht ab sofort die offizielle Website von Diablo III zur Verfügung. Als Spieler der alten Versionen freue ich mich natürlich besonders, dass es zu einer neuen Version inkl. neuer Grafikengine kommen wird.

Mich wundert ja zusätzlich, dass daran bereits seit 4 Jahren entwickelt wurde und bis zur offiziellen Ankündigung ja kaum etwas davon zu hören war - ausser ein paar Gerüchten.

Dann hoffe ich, dass das Teil bald verfügbar sein wird.

  2 Kommentare - 803 mal angesehen   |  2 Trackbacks   |  Permalink  |  Trackback-URL


UniformGrid - das einfache Grid

24.06.08 - .NET, WPF
Beitrag von Norbert Eder
 Im Namespace System.Windows.Controls.Primitives verbirgt sich ein Grid namens UniformGrid. Dabei handelt es sich um ein wirklich sehr einfaches Grid, welches (wie der Name schon sagt) im Endeffekt nicht mehr tut, als alle enthaltenen Elemente in gleicher Größe darzustellen. Dabei wandert jedes Kindelement in eine eigene Zelle.

Sehen wir uns gleichein Beispiel an:
<UniformGrid>
    <Button Content="Button 1"/>
    <Button Content="Button 2"/>
    <Button Content="Button 3"/>
    <Button Content="Button 4"/>
</UniformGrid>


Definiert wird ein UniformGrid mit insgesamt vier Buttons als Kindelemente. Und so sieht's aus:



Wird nun ein weiterer Button hinzugefügt, ändert sich das UniformGrid wie folgt:



Wie also zu sehen ist, werden die notwendigen Spalten und Reihen automatisch berechnet. Diese können aber mit den Attributen Columns und Rows beeinflusst werden:
<UniformGrid Columns="2" Rows="3">
    <Button Content="Button 1"/>
    <Button Content="Button 2"/>
    <Button Content="Button 3"/>
    <Button Content="Button 4"/>
    <Button Content="Button 5"/>
</UniformGrid>

Definiert sind zwei Spalten und drei Reihen. Hier das Ergebnis:



Aber aufgepasst: angezeigt wird nur, was auch tatsächlich auf die vorhandene Fläche passt:
<UniformGrid Columns="2" Rows="2">
    <Button Content="Button 1"/>
    <Button Content="Button 2"/>
    <Button Content="Button 3"/>
    <Button Content="Button 4"/>
    <Button Content="Button 5"/>
</UniformGrid>

Definiert sind zwei Spalten und zwei Reihen, vorhanden sind jedoch fünf Elemente. Das wird daraus:



Viel Spaß beim Probieren.

  2 Kommentare - 1695 mal angesehen   |  0 Trackbacks   |  Permalink  |  Trackback-URL


Was hat Firefox 3 mit Nirvana zu tun?

24.06.08 - Internet
Beitrag von Norbert Eder
 Gemeint ist hier nicht Nirvana als Band, sondern vielmehr Nirwana als Austritt aus dem Kreislauf des Leidens.

Aber was hat das nun mit Firefox 3 zu tun? Grundsätzlich ja ein Browser, den ich dann doch des Öfteren benutze, da ich auf einem Rechner IE7 nicht installieren kann, da sonst ein bestimmtes Produkt nicht laufen würde und da hin und wieder Webgeschichten mit mehreren Browsern getestet werden müssen.

Nun allerdings seit Firefox 3 bin ich mir nicht mehr so sicher, ob ich ihn auch wirklich weiterhin benutzen möchte. Ich tippe mal auf: "Nein, ich will nicht". Warum? Weil sich Firefox 3 gerade bei Multimedia-Inhalten von seinem Leid selbständig erlöst und einfach alle Schotten dicht macht. Bumm, zack und weg. Ständig.

Ab sofort kann sich das Teil im Nirwana vertschüssen, so oft es will. Da stört es mich nicht weiter. *Winke*

  9 Kommentare - 895 mal angesehen   |  0 Trackbacks   |  Permalink  |  Trackback-URL



Zurück Weiter