.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

Das .NET BlogBook bricht die 20.000 Downloads-Schallmauer

02.04.08 - Blog-Intern, .NET, Grundlagen, Base Framework, WPF, ASP.NET, Silverlight, Mobile Devices, Datenverwaltung, Visual Studio, Allerlei, Microsoft Office, SQL Server
Beitrag von Norbert Eder
 Kürzlich wurde der 20.000ste Download vom .NET BlogBook vollführt. Für mich als Herausgeber ist dies natürlich eine große Freude. Schließlich existiert das .NET BlogBook erst seit knapp mehr als einem Jahr.

Das gibt natürlich Motivation für weitere Anpassungen, Ergänzungen und natürlich Verbesserungen.

Vielen Dank auch an alle Leser, die das Team mit Rückmeldungen motivieren oder Verbesserungen anregen.

Danke!

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


Externes XML mit der WPF an Elemente binden

02.04.08 - .NET, WPF
Beitrag von Norbert Eder
 Data Binding (siehe hier und hier) ist ein sehr wichtiges und häufig genutztes Konzept in der Windows Presentation Foundation.

Kurze Data Binding Einführung


Damit kann eine Datenquelle an ein Element gebunden werden. Je nachdem wie das Binding definiert wird, werden Änderungen in beide Richtungen durchgeschliffen oder nur in eine. Soweit in aller Kürze.

Ein einfaches Beispiel


In vielen Fällen (vor allem kleinere Anwendungen) kommt man mit einer XML-Datei als Quelle aus. In einigen Fällen werden darin nicht nur "unsichtbar" Informationen (Konfiguration etc.) gespeichert, sondern müssen auch einmal angezeigt werden. Idealerweise erledigt man diesen Punkt per Data Binding, da auf damit einiges an Arbeit (und somit auch Zeit) gespart werden kann.

Aber gehen wir ein Beispiel Schritt für Schritt durch.

Wichtig ist, dass ein entsprechendes XML definiert wird. In diesem Fall wird einem neuen WPF Application Projekt ein neues Item XmlData.xml hinzugefügt und ins Unterverzeichnis Resources gelegt. Wichtig ist, in den Eigenschaften der Datei, die Build Action auf Content zu stellen und Copy to Output Directory auf Copy if newer. Damit wird sichergestellt, dass die XML-Datei bei der Ausführung der Anwendung auch tatsächlich vorhanden ist, also in das Output-Verzeichnis kopiert wird.

In diesem einfachen Beispiel enthält die XML-Datei Personendaten und sieht so aus:
<Persons>
  <Person>
    <Firstname>Norbert</Firstname>
    <Lastname>Eder</Lastname>
  </Person>
  <Person>
    <Firstname>Hugo</Firstname>
    <Lastname>Tester</Lastname>
  </Person>
</Persons>


Damit wir auf die XML-Datei als Ressource zugreifen können, müssen wir in unserem Fenster (Window) diese als Ressource definiert werden. Möchte man die XML-Datei anwendungsweit zur Verfügung haben, muss sie als Ressource in der App.xaml definiert werden.

Hierfür ist ein XmlDataProvider zu verwenden. Diesem muss per x:Key ein eindeutiger Schlüssel zugewiesen werden, mit dem auf diese Ressource zugegriffen werden kann. Anschließend ist ein XPath zu definieren, der den Pfad auf die Einträge in der XML-Datei angibt, die angezeigt werden sollen. Schlussendlich ist noch die Eigenschaft Source zu definieren. Diese gibt den Pfad zur XML-Datei an. Und so sieht es aus:
<XmlDataProvider 
    x:Key="PersonsData" 
    XPath="Persons/Person" 
    Source="Resources/XmlData.xml"/>

Damit wäre nun die Ressource definiert und dadurch kann damit gearbeitet werden. Als nächsten Schritt werden alle Einträge an eine ListBox gebunden. Dazu wird im Hauptfenster eine ListBox definiert, deren ItemsSource an die XML-Datenquelle gebunden wird:
<ListBox 
    x:Name="PersonsListBox" 
    Grid.Column="0" 
    Grid.Row="0">
    <ListBox.ItemsSource>
        <Binding Source="{StaticResource PersonsData}"/>
    </ListBox.ItemsSource>
</ListBox>

Dazu wird ein Binding für ItemsSource definiert, welches auf auf statische Art und Weise die Resource mit dem definierten Schlüssel PersonsData zugreift. Diese wird durch den definierten XmlDataProvider repräsentiert.

Wenn nun bei der Auswahl eines Eintrags der ListBox die einzelnen XML-Elemente in eigenen Feldern angezeigt werden sollen, dann kann dies ebenfalls mit einem Binding gelöst werden.

In diesem Beispiel werden die einzelnen Elemente, welche die einzelnen Werte anzeigen sollen, in einem StackPanel angezeigt. Da alle Elemente im StackPanel die gleiche Datenquelle haben, kann die Eigenschaft DataContext des StackPanels genutzt werden.
<StackPanel 
    Orientation="Vertical" 
    DataContext="{Binding ElementName=PersonsListBox, 
                    Path=SelectedItem}" 
    Grid.Column="1" 
    Grid.Row="0">

Was passiert hier? Das StackPanel erhält als Datenkontext den ausgewählten Eintrag der ListBox. Damit nun die Kinder-Elemente des StackPanels die einzelnen Werte anzeigen können, muss bei ihnen ebenfalls ein Binding definiert werden:
<Label Content="{Binding XPath=Firstname}"/>

Im Binding wird ein XPath angegeben und dieser verweist auf das Child-Element Firstname. Dies bedeutet, dass im definierten Label der Vorname des in der ListBox ausgewählten Elements angezeigt werden soll.

Fazit


Diese Beispiel zeigte, wie einfach ein XML Data Binding realisiert werden kann. Notwendig sind dazu natürlich Daten in Form einer XML-Datei und ein wenig Wissen rund um das Thema Data Binding. Mit Hilfe dieses Beispiels sollten erste Binding-Versuche erfolgreich abgeschlossen werden können.

Download WPF Xml Data Binding Demo

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


Microsoft Live Search vs Google - Microsoft's Nachteil

02.04.08 - Kunterbunt
Beitrag von Norbert Eder
 Die Suche von Google ist ja eigentlich als die einzige wirkliche Innovation von Google zu werten. Die Live Search von Microsoft gilt ja weitläufig nicht unbedingt als Innovation. Dennoch habe ich mir angewöhnt, die Live Search zu benutzen (anstatt Google), da die Ergebnisse mittlerweile gut sind.

Das was mir aber immer wieder dabei auffällt:
Ich habe zwar die Live Search als Startseite eingerichtet, aber im Sinne der Wiederverwendbarkeit, benutze ich immer wieder ein bereits geöffnetes Tab. Anstatt jedoch auf den Home-Button zu klicken, klicke ich meist in die Adressleiste und tippe die URL schnell ein. Und dabei ist mir ein gewaltiger Nachteil der Live-Search aufgefallen. Für viele nicht neu, für mich eigentlich auch nicht (hab es mir immerhin schon öfter gedacht), aber eben erst jetzt mal ein Post dazu, weil dies sicher besser gemacht werden könnte:

Die Eingabe von www.google.at geht einfach wesentlich schneller von der Hand als search.live.com (absichtlich nicht verlinkt). Echt. Das ist ein Nachteil, liebe Jungs aus Redmond.

  6 Kommentare - 761 mal angesehen   |  0 Trackbacks   |  Permalink  |  Trackback-URL


Debug Data Binding in WPF

02.04.08 - .NET, WPF
Beitrag von Norbert Eder
 Fehler im Data Binding können durchaus eine nervige Angelegenheit sein, zumal sie manchmal nicht wirklich einfach zu finden sind. Einen sehr ausführlichen und vor allem interessanten Beitrag zu diesem Thema hat Beatriz Costa verfasst:

How can I debug WPF bindings?

Sehr empehlenswert!
  Kommentar hinzufügen   |  1 Trackbacks   |  Permalink  |  Trackback-URL


Eigene WPF Sektion verfügbar

02.04.08 - Blog-Intern, .NET, WPF
Beitrag von Norbert Eder
 Um dem 1. April und den üblichen Scherzen aus dem Weg zu gehen, möchte ich erst Heute auf die neue verfügbare Sektion aufmerksam machen. Ab sofort steht ein Bereich speziell für die WPF zur Verfügung. Darin finden sich zur Zeit ausgewählte Blog-Artikel. Weitere Informationen, How-To's, Ressourcen, Links etc. werden im Laufe der Zeit hinzukommen, um zukünftig einen möglichst guten Anlaufspunkt zu diesem interessanten Thema zu bieten.

Zum WPF Bereich

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


Die Trickkiste geht in die nächste Runde

31.03.08 - Blog-Intern
Beitrag von Norbert Eder
 Wieder einmal ist es soweit. So sind doch wieder einige Artikel hinzugekommen, die anscheinend von größerem Interesse sind/waren. Diese wurden daher in die Trickkiste aufgenommen und können darüber nun einfach gefunden werden.

Wo wurden Erweiterungen durchgeführt:
- WPF
- Design Patterns

Für Anregungen etc. bin ich natürlich immer zu haben, also einfach nur aufschreien :)
  Kommentar hinzufügen   |  0 Trackbacks   |  Permalink  |  Trackback-URL


WPF vs WinForms: Softwareentwickler Performance-Test

31.03.08 - Entwicklung, Diskussionen, .NET, WPF
Beitrag von Norbert Eder
 Was macht man Wochenends am Abend, wenn man mit einem anderen Softwareentwickler zusammen sitzt und über einiges aus der eigenen Branche sinniert? Ganz einfach, man kommt auf lustige Ideen und setzt diese dann auch gleich um (oder versucht es zumindest). So vergangenes Wochenende geschehen.

Ausgangspunkt war ein Thread auf dem .NET-Forum.de. Hier kam im Laufe einer Diskussion auf, dass es doch wesentlich schneller und einfacher unter WinForms möglich ist, eine Oberfläche zu erstellen. Schließlich muss man lediglich die einzelnen Elemente in den Designer ziehen, ein wenig konfigurieren und fertig ist die Lösung.

Dem konnte ich so nicht gänzlich zustimmen, zumal man (vorausgesetzt ist weniger ein gekonnter Umgang mit der Maus, vielmehr ist die Fingerfertigkeit bezüglich Tastatur gefragt) in der deklarativen Variante (XAML) sehr gut mittels Copy & Paste (Achtung, Murphy lauert) arbeiten kann und einem so sehr viel Tippslerei erspart bleibt.

Gut, also wurde ein Testszenario ersonnen: Eine kleine Anwendung, die mit Daten aus einem XML gefüttert wird, diese anzeigen soll und zusätzlich die Funktionalitäten Neu, Edit und Save behandeln sollte. Nachdem die Anforderungen definiert wurden musste noch die Stoppuhr gestartet werden und schon konnte es losgehen.

Leider hatten wir keine Videokamera zur Verfügung, sonst hätten wir es in der Tat gefilmt und online gestellt (auch wenn die Lösungen wirklich schmutzig waren), aber der zeitliche Unterschied war schon recht eklatant. Und damit meine ich, dass die WPF-Variante ungefähr 50% der Entwicklungszeit unter WinForms benötigte.

Nun. Natürlich ist dieser Test in keinster Weise wirklich aussagekräftig, noch ist er für den Leser nachvollziehbar (mit Video sähe es anders aus), aber es war grundsätzlich als kleiner Test gedacht um einen ungefähren Anhaltspunkt zu bekommen. Das was sich dabei halt herausgestellt hat war, dass die WPF Lösung auf jeden Fall schneller implementiert war und zusätzlich noch die Möglichkeit der Customization bot, d.h. das Aussehen konnte vollständig angepasst werden. Bei der WinForms-Anwendung: Niete.

Das spricht dann schon wieder eine deutlichere Sprache. Kürzere Implementierungszeit und höhere Anpassbarkeit. Schon eine nette Sache.

Interessant wäre nun der direkte Vergleich in einer größer angelegten Anwendung. D.h. mit einer Implementierungszeit von mehr als 5 MD. Wird sich in der Realität zwar vermutlich nicht spielen, aber durchaus ein interessantes Experiment. Denn gerade auf diesem Gebiet gibt es zahlreiche Spekulationen, wodurch natürlich viele Interessierte verunsichert werden und somit lieber die Finger von dieser Technologie lassen.

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


WPF Demo zu Data Binding, DataTemplate usw.

28.03.08 - .NET, WPF
Beitrag von Norbert Eder
 Für einen Demo-Anlaß ist gestern eine kleine Beispielanwendung auf Basis WPF entstanden, die ein paar Grundkonzepte vermittelt
  • Data Binding
  • Data Templates
  • CLR Namespaces
  • Styles
  • usw.


Grundsätzlich tut die Anwendung nicht viel. Sie zeigt lediglich Personendatan innerhalb einer ListBox in Form einer Visitenkarte an. Zusätzlich kann das angehängte Foto (in diesem Fall nur Beispielgrafiken) vergrößert dargestellt werden. Das ganze sieht dann so aus:



Designtechnisch begabte Personen können die Darstellung sicherlich nach belieben verbessern, der WPF-Einsteiger hat die Möglichkeit, sich ein paar Dinge genauer anzusehen. Sicherlich für den Einsteiger ein überschaubares Beispiel.

Da ich es niemanden vorenthalten wollte (würde sonst lediglich auf meiner Festplatte verstauben), hier der Download:

Download WPF Demo
  4 Kommentare - 2012 mal angesehen   |  1 Trackbacks   |  Permalink  |  Trackback-URL


BigDog Beta Quadruped Robot

26.03.08 - Kunterbunt
Beitrag von Norbert Eder
 Im Eintrag BigDog, oder besser die Fliege? habe ich ja bereits von BigDog berichtet.

Das dort gezeigte Video zeigt jedoch noch das alte Modell. Daher empfehle ich, auf gizmodo.com das aktuellste Video anzusehen.



Nette Sache ;-)
  1 Kommentar - 959 mal angesehen   |  0 Trackbacks   |  Permalink  |  Trackback-URL


WPF: Windows System Fonts in einer CoomboBox darstellen

26.03.08 - .NET, WPF
Beitrag von Norbert Eder
 Viele kennen die ComboBox mit den Systemschriften aus den diversen Office-Produkten und auch anderen Anwendungen. Nicht nur, dass der Name der Schrift angezeigt wird, man bekommt auch gleich eine Vorschau.

Dass die Umsetzung nicht aufwändig ist, zeigt nachfolgendes Beispiel. Hierzu das notwendige XAML:
<ComboBox x:Name="FontChooser">
    <ComboBox.ItemsPanel>
        <ItemsPanelTemplate>
            <VirtualizingStackPanel />
        </ItemsPanelTemplate>
    </ComboBox.ItemsPanel>
    <ComboBox.ItemTemplate>
        <DataTemplate>
            <TextBlock Text="{Binding}" FontFamily="{Binding}"/>
        </DataTemplate>
    </ComboBox.ItemTemplate>
</ComboBox>

Hier wird eine ComboBox angelegt, das ItemsPanel überschrieben (aus Performancegründen) und ein DataTemplate für die Darstellung der einzelnen Items definiert.

Das DataTemplate besteht aus einem TextBlock, welchem via Data Binding der Text (Name der Schriftart) als auch die FontFamily (die zu verwendende Schriftart zur Darstellung) übergeben werden.

Im Source ist dann nur mehr folgende Zeile notwendig und das Ergebnis kann bewundert werden:
FontChooser.ItemsSource = Fonts.SystemFontFamilies;

Die System-Schriften sind in Fonts.SystemFontFamilies aufgelistet und können direkt an die ItemsSource-Eigenschaft der ComboBox übergeben werden. Damit werden automatisch die einzelnen Items hinzugefügt und die Werte mittels dem oben definierten Data Binding zugewiesen.

Fertig ist die Fonts-ComboBox. Und so sieht sie aus:


  2 Kommentare - 1926 mal angesehen   |  1 Trackbacks   |  Permalink  |  Trackback-URL



Zurück Weiter