ListCollectionView

WPF_logo

In einem Kundenprojekt gab es die Anforderung die Daten aus einem DataGrid in der vom Anwender sortierten Reihenfolge zu drucken. Üblicherweise bindet man in einer WPF-Anwendung (MVVM) das DataGrid an die Instanz einer ObservableCollection. Eine gebundene ObservableCollection hat aber leider den Nachteil, dass sie vom Sortieren durch den Anwender (z.B. durch Click im Spaltenheader) nichts mitbekommt. D.h. die ursprüngliche Reihenfolge der Items in der ObservableCollection bleibt erhalten. Abhilfe schafft hier die Klasse ListCollectionView. Man erzeugt sich einfach eine neue Instanz einer ListCollectionView in dem man beim Konstruktor einfach die Instanz der ObservableCollection (oder einer Liste wie im Beispielprojekt) übergibt und bindet diese neue Instanz an das DataGrid. Wie man leicht mit einer Foreach-Schleife feststellen kann, entspricht die Reihenfolge der Items dann der Reihenfolge im DataGrid.

Hier ein Beispielprojekt mit freundlicher Unterstützung von Thomas Sobizack.

Weitere Infos z.B. unter http://weblogs.asp.net/monikadyrda/wpf-listcollectionview-for-sorting-filtering-and-grouping

 

Application Insights für Desktop Anwendungen (WPF + WinForms)

Windows Azure bietet mit Application Insights eine einfache Möglichkeit Telemetriedaten für Desktop-Anwendungen und Dienste zu sammeln. Diese Daten können unter anderem Aufschluss darüber geben, wie oft welche Funktionalität in der Anwendung verwendet wird, wie viele Benutzer zu welchen Zeiten die Anwendung verwenden, wie häufig die Anwendung abstürzt oder wie häufig Exceptions auftreten. Das Sammeln dieser Informationen kann z.B. zur Verbesserung der Anwendung beitragen, in dem z.B. häufig verwendete Funktionen schneller und einfacher für den Anwender zugängig gemacht werden. So könnten solche Funktionalitäten im Ribbon nach links oder im Kontextmenu nach oben wandern. Unter https://azure.microsoft.com/en-us/documentation/articles/app-insights-windows-Desktop/ findet man eine sehr gute Anleitung. Etwas verwirrend ist leider die Tatsache, dass der in der Anleitung benötigte ‘Instrumentation Key’ im Portal (zumindest in der deutschsprachigen Version) ‘Komponenten-ID’ heißt: AppInsigths1      

Zu Evaluierungszwecken habe ich ein kleines WPF-Testprojekt angelegt. Bitte in diesem Testprojekt, den Instrumentation-Key in der Datei ApplicationInsights.config anpassen. Bitte auch die installierten Nu-Get Pakete beachten. Ich habe das Paket ‘Desktop Apllication Insights’ hinzugefügt, welches aktuell nur in einer Vorabversion existiert. Die abhängigen Pakete werden dann automatisch hinzugefügt.

AppInsigths4

Die Testanwendung gibt z.B. einen simplen Einblick, wie oft welcher Button betätigt wurde:

AppInsigths3

AppInsigths2

Code Contracts

CodeContracts verwendet man zur Überprüfung von Parametern vor der eigentlichen Methodenausführung. Zunächst sollte das erforderliche Visual Studio AddIn (von Microsoft) installiert werden.  Nach der Installation erhält man unter den Projekteigenschaften eine neue Karteikarte Code Contracts:

CodeContracts1

Dort kann man sowohl das Static- als auch das Runtime-Checking aktivieren. Die statische Überprüfung wird unmittelbar nach dem Kompilieren ausgeführt und kann Probleme frühzeitig erkennen. Bei aktiviertem Runtime-Checking (z.B. im Debug -Modus) werden zur Laufzeit Exceptions geworfen, wenn gegen den Vertrag verstoßen wird. Ist die Runtime -Überprüfung ausgeschaltet (z.B. im Release-Modus), wird der Code ignoriert. Das führt natürlich zu einer verbesserten Performance. Im Code sieht das im einfachsten Fall so aus:

CodeContracts2

Bei aktivierter statischer Überprüfung werden dann folgende Fehler ausgegeben:

CodeContracts3

Weitere Infos unter:

http://www.codeproject.com/Articles/103779/Introducing-Code-Contracts

und

https://msdn.microsoft.com/de-de/library/system.diagnostics.contracts.contract%28v=vs.100%29.aspx

 

 

 

Windows Service Status

Service

Das Microsoft .Net Framework bietet eine einfache Möglichkeit festzustellen, ob ein bestimmter Windows Dienst gestartet ist und läuft.

C# Beispielcode:

(Verweis auf System.ServiceProcess muss vorab eingefügt werden)

using System;
using System.ServiceProcess;

namespace IsServiceRunning
{
  public class Program
  {
    public static void Main(string[] args)
    {
      const string serviceName = "Windows Search";
      Console.WriteLine("Service '{0}' running: {1}", serviceName, IsRunning(serviceName).ToString());
      Console.ReadLine();
    }

    /// <summary>
    /// windows service running ?
    /// </summary>
    /// <param name="serviceName">service name</param>
    /// <returns>true or false</returns>
    private static bool IsRunning(string serviceName)
    {
      try
      {
        ServiceController sc = new ServiceController(serviceName);
        return sc.Status == ServiceControllerStatus.Running;
      }
      catch
      {
        return false;
      }
    }
  }
}

Entsprechenden VB-Code findet man hier: http://dotnet-snippets.de/snippet/pruefen-ob-ein-dienst-gestartet-ist/157

Free Microsoft EBooks

ebook

oldie, but goodie:

Microsoft verschenkt 63 E-Books zu Office 365, SharePoint, SQL Server, Visual Studio, Windows Azure, Windows Server und Co. http://windowsdeveloper.de/news/Microsoft-verschenkt-63-EBooks-zu-Office-365-SharePoint-SQL-Server-Visual-Studio-Windows-Azure-Windows-Server-Co

EBooks hier: http://blogs.msdn.com/b/mssmallbiz/archive/2013/06/18/huge-collection-of-free-microsoft-ebooks-for-you-including-office-office-365-sharepoint-sql-server-system-center-visual-studio-web-development-windows-windows-azure-and-windows-server.aspx

 

 

TFS Guide

TFSGuide

An dieser Stelle möchte ich auf den TFS Guide hinweisen: http://tfsguide.codeplex.com/.

Der TFS Guide wurde zwar seit 2007 nicht mehr angepasst, er enthält aber immer noch wichtige Informationen und Hilfestellungen, wenn es um das Thema Patterns & Best Practices geht. Insbesondere enthält er ein ausführliches Kapitel zum Thema Branching. Hier wird erläutert, wann man und wie man Branchen sollte. Weitere Infos zu diesem speziellen Thema findet man hier: http://vsarbranchingguide.codeplex.com/Releases

 

 

OpenXML Package Editor for Visual Studio 2013

PackageEditor

Leider gibt es den OpenXML Package Editor aktuell nur für Visual Studio 2010. Mit einem Trick kann man dieses nützliche Tool jedoch auch mit Visual Studio 2012 und 2013 verwenden. Wie dies genau funktioniert, ist hier beschrieben. Leider gibt es die erforderlichen Registry-Keys in dem oben beschriebenen Link nur für VS 2012. Für  VS 2013 (64 Bit) habe ich die Keys entsprechend geändert und biete diese hier zum Download an.

 

 

Übersetzung .Net Fehlermeldungen

Schon mal die exakte englischsprachige Übersetzung einer deutschen .Net-Fehlermeldung gesucht? Dann ist das die richtige Seite: FindErr.Net

FindErrorNet

Als Entwickler ist das oft sehr nützlich, da die englische Version einer Fehlermeldung häufig noch mehr und bessere Suchmaschinentreffer liefert.