Vorschau auf Windows 8 für Entwickler

by wmn 24. November 2011 00:09

Seit geraumer Zeit gibt es ja Windows 8 und Visual Studio als Preview-Version zum herunterladen. Dennoch sind viele Dinge, die auf die Entwickler zukommen, unklar. Wer nicht die Zeit hat, alles selbst auszuprobieren, sollte sich mal folgendes Video ansehen (1 h!). Es ist die bisher beste Präsentation, die ich gefunden habe: http://dnrtv.com/dnrtvplayer/player.aspx?ShowNum=0207

Inzwischen gibt es auch ein WIKI zum Thema, das fortlaufend erweitert wird: http://metroapps.wikispaces.com/ 

In diesem Wiki habe ich zum ersten Mal auch eine vernünftige Übersicht zum Thema Kompatibilität zwischen heutigen WPF/Silverlight-Anwendungen und WinRT-Anwendungen im Metro-Style gefunden!

Der Einstieg in DevFORCE – Beispiel mit Anleitung verfügbar

by wmn 11. October 2011 17:58

Will man sich einen ersten Überblick über DevForce verschaffen, kann man jetzt auf unserer neuen Domain die ersten Infos auf Deutsch beschaffen. Neben einem deutschen Whitepaper gibt es (neu) auch ein deutsches Tutorial, wie man in der Praxis mit DevForce umgeht – samt Quellcode und Schritt für Schritt Anleitung. Das ganze findet man unter www.devforce.de

Informationen zu DevForce

by wmn 30. September 2011 18:08

Auf der BASTA habe ich das Produkt DevForce vorgestellt. Als Partner von Ideablade sind wir als Ansprechpartner in Deutschland aktiv. Wir haben daher auf unserer Homepage angefangen entsprechende Informationen zum Produkt bereit zu stellen. Erste Unterlagen haben wir auch schon übersetzt. Bei Fragen bitte einfach anrufen: Infos zu DevForce

Tracing and Caching fürs Entity Framework

by wmn 4. August 2011 19:13

Tracing und Caching sind wichtige Dinge insbesondere bei größeren Anwendungen. Hierzu kann man sich viele Dinge selber erstellen. Wer dazu keine Zeit hat sollte mal einen Blick auf die Tools werfen, die vom Entity-Framework-Team bereitgestellt wurden. Hier ist auch nochmals ziemlich gut erklärt, wie man sich in die bestehende Architektur des Entity-Frameworks “einklinken” kann.

http://code.msdn.microsoft.com/EFProviderWrappers

Windows 8 und die Entwickler – Die Gerüchteküche brodelt

by wmn 1. July 2011 20:49

Nachdem es zu diesem Thema zahllose Diskussionen gibt, habe ich hier mal einige Links zu aktuellen Informationen gesammelt. Das spart dem ein oder anderen sicher die mühsame Suche nach verwertbaren Informationen.

http://www.zdnet.com/blog/microsoft/microsoft-needs-to-tell-windows-8-developers-now-about-jupiter-and-silverlight/9608?tag=rbxccnbzd1

http://arstechnica.com/microsoft/news/2011/06/windows-8-for-software-developers-the-longhorn-dream-reborn.ars

http://www.heise.de/developer/artikel/Windows-8-HTML5-und-die-Folgen-fuer-NET-1267153.html

Nachtrag vom 11.8. Informationen von Telerik zum Thema: http://networkedblogs.com/lvZm1 

 

Die Reihenfolge der Links ist willkürlich und ohne Wertung! Sollte jemand noch was sinnvolles finden bin ich sehr daran interessiert.

Lesenswerter Artikel zu Windows 8 und was auf uns erwartet

by wmn 27. June 2011 23:47

In den vergangenen Wochen gab es ja ziemliche Unruhe unter den Entwicklern, was die Zukunft von .NET, WPF und Silverlight betrifft. Nach wie vor hat sich Microsoft nicht zu Details geäußert und die Aufklärung auf den September verschoben. In dieser Phase der Verunsicherung hilft vielleicht folgender Fachartikel etwas Licht in die Gerüchteküche zu bringen:

http://arstechnica.com/microsoft/news/2011/06/windows-8-for-software-developers-the-longhorn-dream-reborn.ars

Viel Spaß beim Lesen.

.Net Stammtischvortrag zu DevForce und RIA-APPLICATIONS am 25.5.11

by wmn 26. May 2011 21:03

Gestern haben wir einen Vortrag von Marcel Good von Ideablade aus Californien gehört. Er hat das Produkt DevForce vorgestellt, das wir auch in unseren Projekten bereits mit Erfolg einsetzen. In dem vorgeführten Live-Beispiel wurde es, denke ich, allen Beteiligten klar wieviel Zeit man sich durch den Einsatz von DevForce sparen kann. Wer WPF- oder Silverlightanwendungen entwickelt sollte sich dieses Produkt unbedingt einmal ansehen.

In den kommenden Tagen stellen wir das zugehörige Material auf der .NET-Stammtischhomepage noch online: www.devgroup-stuttgart.de

Wer sich näher für das Produkt interessiert kann bei mir auch noch eine Zusammenfassung der Produktfeatures im Vergleich zu den RIA-Services bekommen. Bitte meldet Euch einfach bei mir.

Hier noch der Link auf die Homepage von IdeaBlade: www.ideablade.com

Unterlagen DevCon Frankfurt 2010

by wmn 16. November 2010 01:00

Auf der DevCon in Frankfurt (www.devcon.dfpug.de)  habe ich wieder mal zahlreiche Vorträge gehalten. Mein Dank geht an alle, die so lange durchgehalten haben und sich teilweise sogar abends noch unsere Fallstudie bis 22:30 Uhr angetan haben!

Wer es nochmals braucht bzw. die Unterlagen noch nicht hat, kann die Vortragsunterlagen hier  herunterladen. Fragen und Ideen sind natürlich jederzeit gerne willkommen.

CommandBindings in Silverlight und WPF

by wmn 14. June 2010 14:11

Da ich auch lange nach einem kurzen und einfachen Beispiel für die Verwendung von Commands in Silverlight und WPF gesucht habe, dokumentiere ich mal hier die wesentlichen Schritte.

Silverlight - Schritt 1:

Zuerst einmal müssen wir uns das CommandBinding definieren.

image

Silverlight – Schritt2:

Jetzt “verbinden wir das Commandbinding mit den entsprechenden Handlermethoden im Codebehind der Maske


image

Silverlight – Schritt 3:

Jetzt müssen wir nur noch das entsprechende Steuerelement – hier der Button – mit dem Commandbinding “verbinden”:


image

Das war’s auch schon. Im Unterschied zur WPF können wir derzeit mit dem Silverlight Standard-Control keine Tastaturvorbelegung machen!

Mit WPF ist eigentlich alles gleich zu definieren. Allerdings kann man hier noch z.B. Ctrl+S auf der Tastatur vorbelegen:

image

Dies ist unter Silverlight nur mit mehr Aufwand oder mit Contrrols verschiedener Hersteller möglich.

Tags:

WPF | Silverlight

Linq to SQL Fremdschlüssel programmatisch umsetzen

by wmn 10. February 2010 22:24

In LinqtoSQL gibt es ein Problem, wenn man versucht Fremdschlüssel eines Datensatzes programmatisch umzusetzen, wenn es sich bei den beteiligten Tabellen um eine 1:n Beziehung handelt. In meinem Fall von heute ging es darum, den zugehörigen Parent-Datensatz “umzuhängen”.  Als Entwickler ist man geneigt einfach den Foreign-Key mit dem anderen Schlüssel zu ersetzen. In Linq führt das zu einer Exception:

image

image

Lösung:
Statt nur den Fremdschlüssel umzusetzen muss man die ganze Referenz umhängen indem man das neue, richtige Objekt zuweist. Linq löst hinter den Kulissen beim Speichern die IDs richtig auf und schreibt den geänderten Fremdschlüssel richtig weg. Auch in diesem Fall ist die Fehlermeldung nicht gerade sehr hilfreich!

Tags:

WPF | LINQ

Verwendung der WPF ComboBox mit Linq

by wmn 25. November 2009 22:28

Nachdem ich selber kein vernünftiges Beispiel zu diesem Thema gefunden habe, kommt hier kurz zusammengefasst die Verwendung der WPF/Silverlight Combobox nochmal im Zusammenspiel mit LINQ.

Folgende Tabellen liegen diesem Beispiel zugrunde:

image

Im Beispiel soll über eine Combobox die aktuelle Position des Mitarbeiters eingetragen werden. In der Mitarbeitertabelle gibt es dazu das ForeignKey-Feld FK_Position und eine Relation zur Tabelle Position, die als Lookuptabelle dient.

In meiner Pflegemaske ist die Liste der Mitarbeiter so definiert:

image

In meiner Pflegemaske ist die Combo so definiert:

image

Und im Codebehind der Maske werden die Daten wie folgt geladen:

image

Ganz wichtig damit der Refresh der Combobox richtig funktioniert:

Im Listview, der die Mitarbeiterliste anzeigt, muss die Eigenschaft IsSynchronizedWithCurrentItem=”True” zu setzen!! Nur dann wird der aktuelle “Datensatz” in der Collection beim Blättern in der Liste auch umgesetzt und nur dadurch refreshed sich auch die Combobox wie gewünscht.

Tags:

WPF | LINQ

MDA (Managed Debug Assitant) Fehler unterbinden

by wmn 4. November 2009 22:29

Wenn man eine Visual Studio-Anwendung debugged und hat darin lang laufende LINQ-Abfragen (sicherlich passiert das auch bei Dingen die in anderen Threads asynchron laufen) kommt es zu MDA-Fehlern und dem Hinweis auf einen ContextDeadlock. Die Meldung hilft einem dabei auch nicht wirklich weiter, zumal das Problem nur beim debuggen einer Anwendung auftritt. Dieses Verhalten kann man über einen Schalter vom Visual Studio im Menü  Debug – Exceptions – Managed Debug Assistants deaktivieren/einschalten

image

Danach läuft die Anwendung in der Regel ohne anzuhalten durch.

Tags:

LINQ | WPF

Databinding und Stringformatierung seit SP1 – das ist an mir vorbei gegangen

by wmn 7. October 2009 23:32

Wenn man in WPF oder Silverlight Daten an ein Control bindet kann man die Daten püber einfach zu erstellende Konverter
Klassen konvertieren bevor sie angezeigt werden bzw. bevor sie zurückgeschrieben werden. Das war bisher so.

Seit dem ServicePack1 von Visual Studio 2008 kan man – zumindest bei den alltäglichen Konvertierungen – eine stark vereinfachte
Syntax verwenden:

<TextBlock>

        <TextBlock.Text>

                <Binding ElementName="myComboBox" Path="SelectedItem.Content" StringFormat="{}{0:C}"/>

        </TextBlock.Text>

</TextBlock>

 

<GridViewColumn Header="Price" DisplayMemberBinding="{Binding Path=Price, StringFormat=C}"/>

<TextBlock>

        <TextBlock.Text>

            <MultiBinding StringFormat="Item1 cost: {0}, Item2 cost: {1}">

                <Binding ElementName="myComboBox" Path="SelectedItem.Content"/>

                <Binding ElementName="myComboBox2" Path="SelectedItem.Content"/>

            </MultiBinding>

        </TextBlock.Text>

</TextBlock>

Die Angabe des Stringformats gibt uns die Möglichkeit zumindest einfach Konertierungen ohne eigene Klasse vorzunehmen. Hierbei kann
man d für kurze Datumsangaben, D für lange Datumsangaben, c für Währung und P für Prozentangaben.

Alternativ gibt es auch noch das Contentstringformat mit dem man komplexere Konvertierungen vornehmen kann:

<Label ContentStringFormat="dddd – d - MMMM">

    <sys:DateTime>2004/3/4 13:6:55</sys:DateTime>

</Label>

 

<Button ContentStringFormat="{}{0:MM/dd/yyyy}">

        <sys:DateTime>2004/3/4 13:6:55</sys:DateTime>

</Button>

 

<ListBox Name="lb1" SelectedIndex="1" ItemStringFormat="F1">

        <sys:Double>3.14159</sys:Double>

        <sys:Double>2.71828</sys:Double>

</ListBox>

 

Diese Vereinfachung ist wirklich hilfreich und funktioniert erst ab ServicePack1 aber dieser dürfte ja inzwischen fast überall freigegeben worden
sein.

Tags:

WPF | Silverlight

WPF Multibinding – schon gewusst?

by wmn 15. September 2009 23:34

Seit der Version 3.5 SP1 gibt es beim Databinding ein neues Feature, das man z.B. für die Anzeige von Tooltips bequem nutzen kann:

Dies hier wäre wohl der "klassische Ansatz um mehrere Texte als Tooltip anzuzeigen:

<Element>
  <
Element.Tooltip>
    <
StackPanel Orientation="Horizontal">
      <
TextBlock Text="{Binding Path=Feldwert1}"/>
      <
TextBlock Text="% von, "/>
      <
TextBlock Text="{Binding Path=Feldwert2}"/>
      <
TextBlock Text="% bis"/>
    </
StackPanel>
  </
Element.Tooltip>
</
Element>

So gehts inzwischen aber auch:

<TextBox.Text>
    <
MultiBinding StringFormat="{}{1:#0}% von, {2:#0}% bis">
      <
Binding Path="Feldwert1" />
      <
Binding Path="Feldwert2"/>
    </
MultiBinding>
</
TextBox.Text>

Interessanterweise kann man diese Syntax auch in der Datenpflege anwenden. Das führt dazu, dass die Werte der zwei dahinterliegenden Felder in einer
Textbox erscheinen und dort auch gepflegt werden können. Allerdings ist das für den Anwender nicht gerade transparent wo das erste Feld aufhört und
wo das zweite anfängt. Auch das Thema Datenvalidierung wird dadurch sicher schwieriger. Insofern ist dieses neue Feature hier sicher nicht angebracht!

Tags:

WPF

Daten in einem ListView dynamisch anzeigen

by wmn 2. September 2009 23:36

Häufig will man Daten, die einem bestimmten Status entsprechen oder bestimmte Werte überschreiten in einer Liste besonders hervorheben. Dies kann man in WPF recht einfach machen. Hier kann man sogar dynamisch die komplette optische Darstellung eines Elementes zur Laufzeit über einen Trigger austauschen.

Untenstehend habe ich einmal ein einfaches Beispiel aus einer WPF-Maske rauskopiert:

  1. Verwendet wird ein ListView-Steuerlement (erweiterte Listbox)
  2. der Trigger bzw. das Template ist der Einfachheit halber im XAML-Code direkt enthalten – im produktiven Einsatz sollte man diese in eine Ressource extrahieren damit man auch mehrere Spalten einfach daran binden kann
  3. Das Listview-Control ist an eine Collection gebunden, die über ein LINQ-Statement selektiert wird. Der Trigger schaltet die Farben abhängig vom Feldinhalt des Feldes Emplstatus (character) um:

<ListView x:Name="lstPlanEmployees" IsSynchronizedWithCurrentItem="True" ToolTip="durch auswählen Personendaten anzeigen"  SelectionChanged="lstPlanEmployees_SelectionChanged" FontSize="12"ItemContainerStyle="{DynamicResource ItemContStyle}" >
<ListView.View>
<GridView>
<GridViewColumn Width="60" >
<GridViewColumn.CellTemplate>
<DataTemplate>
<TextBox x:Name="txtStatusCol" Text="{Binding Path=Emplstatus}" />
<DataTemplate.Triggers>
<DataTrigger Binding="{Binding Path=Emplstatus}" Value="aktiv">
<Setter Property="Foreground" TargetName="txtStatusCol" Value="Green" />
</DataTrigger>
<DataTrigger Binding="{Binding Path=Emplstatus}" Value="inaktiv" >
<Setter Property="Foreground" TargetName="txtStatusCol" Value="Yellow" />
</DataTrigger>
</DataTemplate.Triggers>
</DataTemplate>
</GridViewColumn.CellTemplate>
</GridViewColumn>
<GridViewColumn DisplayMemberBinding="{Binding Path=Jobtext}" Header="Jobtext" Width="150" />
<GridViewColumn DisplayMemberBinding="{Binding Path=Name}" Width="180" Header="Name" />
</GridView>
</ListView.View>
</ListView>

Tags:

WPF

WPF Datenvalidierung – Schritt für Schritt

by wmn 1. September 2009 23:37

Jeder hat das Problem, dass eingegebene Daten validiert werden müssen, bevor sie in der Datenbank abgelegt werden. Der Anwender soll bereits bei der Eingabe entsprechende Hinweise zu seinen Eingaben erhalten. Unten habe ich mal eine kleine Einführung für eine der vielen möglichen Varianten der Datenvalidierung aufgeführt. Der Text ist etwas rudimentär ich hoffe es hilft trotzdem bei der Entwicklung:

Im Beispiel wurde eine ganz normale WPF-Anwendung erstellt. In das Projekt wurde eine LINQ to SQL- oder Linq to Entities-Klasse aufgenommen um einen Datacontext für den Zugriff auf die Datenbank zu haben.

Textbox-Control im XAML:

  • Databinding ganz normal  an ein Object mit InotifyPropertyChanged-Events z.b. direkt Objekte aus dem DataContext
  • Nach der Prüfung wird bei einem Fehler die Fehlermessage als Tooltip angezeigt
  • Optional könnte man den Style im Fehlerfall noch anpassen – default ist ein roter Rand

<TextBox Margin="5,5,5,5" Grid.Column="1" TextWrapping="Wrap" Text="{ Binding NoDEPC,ValidatesOnExceptions=True, NotifyOnValidationError=true }" Validation.Error="TextBox_Error">
</
TextBox>
Eventhandler für Fehler in der Datenvalidierung im Codebehind oder im Template….

private
void TextBox_Error(object sender,
ValidationErrorEventArgs e)
{
if (e.Action == ValidationErrorEventAction.Added)
            {
            ((Control)sender).ToolTip =
e.Error.Exception.InnerException.Message.ToString();
            }
  else
      {
           ((Control)sender).ToolTip = "";
     }
}

Das gebundene Object z.B. aus dem Datacontext muss erweitert werden:
Hier: gebundenes Feld NoDEPC

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Business;
using System.Collections;

namespace Business
    {
// die EntityKlasse, die vom LINQ-Designer generiert
// wurde, wird hier noch erweitert

public partial class Profit_Center 
   {
   public void SetDefaultValues()
             {
             ID_ProfitCenter = Guid.NewGuid();
             NoDesoursys = "99";
             NoDeco_Area = "XXXXX";
             PNSourSys = "33";
            PNCo_Area = "05";
             IsActive = true;
             IsTemplate = false;
             }
// überschriebene erweiterte Methode aus der Klasse

partial void OnNoDEPCChanged()
   {
   // sobald das property geändert wird
   //z.B. durchs Verlassen der Textbox
   // läuft die Regelprüfung
   CheckNodePC(this.NoDEPC);
   }

//eigentliche Regelprüfung in der klasse
public string CheckNodePC(string Nodename)
   {
   string msg = "";

        if(Nodename== null || Nodename== "")
                 msg = "Profitcenternamen dürfen nicht leer sein ";
        if(Nodename.Contains(" ")== true)
                 msg += "Profitcenternamen dürfen keine Leerstellen enthalten";

       if (msg !="")
           {
       // exception auslösen damit die message auch
       //an die GUI kommt
            throw new ArgumentOutOfRangeException(msg);
             return msg;
           }
         }
    }

Tags:

WPF

Informationen zu den neuen LINQ DataServices

by wmn 4. November 2008 19:09

LINQ to SQL ist ja bisher nicht in der Lage gewesen in einer richtigen mehrschichtigen Architektur zu laufen. Seit kurzem sind die sogenannten DataServices von Microsoft released worden. Damit ist es dann möglich die Datenabfragen per http-Request an einen entfernten DataService Endpoint "auszulagern".

Nähere Informationen findet man hier:

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

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

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


Tags:

c# | LINQ | WPF

Debugging von WPF Anwendungen

by wmn 4. November 2008 19:05

WPF Anwendunggen sind ja derzeit nur recht umständlich zu debuggen. Inzwischen gibt's ein Zusatztool namens Mole: Mole for WPF

Eine ausführliche Dokumentation, Link zu Videos und natürlich der Download selbst, ist auf CodeProject.com zu finden.

Das Tool ist dabei eine große Hilfe da man die aktuellen Werte sehen und verändern kann.

Tags:

c# | WPF