BlackCoin's Corner

und noch ein Blog
MCTS passed



Ja ich weiß, ich habe lange nichts geschrieben, jedoch war und bin ich aktuell Beruflich stark eingespannt.

aber ich möchte trotzdem kurz über etwas Berichten.

Am 30.04.2010 habe ich mich, an dem beta Zertifikat 71-511 versucht, und heute erhielt ich dann endlich die ersehnte Mail.

Congratulations on earning your .NET Framework 4, Windows Applications certification! 
We hope you enjoy the benefits of your certification and of membership in the
Microsoft Certified Professional community.

Ich wünsche allen die sich an diesem Zertifikat versuchen möchten viel Glück.





Posted: Jun 24 2010, 08:52 von Lars Schmitt | mit 3 comment(s)
Abgelegt unter:
Verfügbarkeit der Deutschen VS 2010 Versionen


Die Deutsche Version des Visual Studio 2010, steht unter

http://www.microsoft.com/germany/visualstudio/try/download.aspx

für den Download bereit.

Posted: Apr 29 2010, 12:37 von Lars Schmitt | mit 1 comment(s)
Abgelegt unter:
Das neue DataGrid Steuerelement

An dieser Stelle, möchte ein kurzen Blick auf das neue Steuerelement DataGrid werfen.

 

Wie man es von der Windows Forms Version gewohnt ist, Bindet man eine Datenquelle an dieses Steuerelement und das DataGrid zeigt es an.

 

image

 

um Z.b. diese Fenster zu erzeugen bedarf nur dieser paar Zeilen XAML Code.
   
  

<Window x:Class="WpfApplication28.MainWindow"         xmlns="<a href="http://schemas.microsoft.com/winfx/2006/xaml/presentation"">http://schemas.microsoft.com/winfx/2006/xaml/presentation"</a         xmlns:x="<a href=">http://schemas.microsoft.com/winfx/2006/xaml"">http://schemas.microsoft.com/winfx/2006/xaml"</a     
        Title="MainWindow" Height="350" Width="525">     
    <Window.Resources>     
        </a x:Key="Data" Source="<a>file:///c:/blogs/larsschmitt/Contact.xml" XPath="/contacts"/>     
    </Window.Resources>     
    <Grid>     
        <DataGrid DataContext="{StaticResource Data}" ItemsSource="{Binding XPath=ContactItem}"/>     
    </Grid>     
</Window>    

An diesem Beispiel kann man auch schon gut erkennen, dass man auch dieses mal nicht nur auf Text Zellen beschränkt ist.

 

Die neue Version bringt erst einmal die folgende SpaltenTypen Ich denke mal diese unterschiedlichen Spaltentypen erklären sich von selber.

DataGridCheckBoxColumn
DataGridComboBoxColumn
DataGridHyperlinkColumn
DataGridTemplateColumn
DataGridTextColumn

 

 

 

Selbstverständlich kann die automatische Spalten anzeige, über das Property AutoGenerateColumns deaktiviert werden, somit können die Spalten dann vom Entwickler selbst erzeugt werden. (Ebenfalls wäre eine teils Generiert und teils per Hand Lösung möglich)

 image

   
  

<Window x:Class="WpfApplication28.MainWindow"    
        xmlns="<a href="http://schemas.microsoft.com/winfx/2006/xaml/presentation"">http://schemas.microsoft.com/winfx/2006/xaml/presentation"</a     
        xmlns:x="<a href=">http://schemas.microsoft.com/winfx/2006/xaml"">http://schemas.microsoft.com/winfx/2006/xaml"</a     
        Title="MainWindow" Height="350" Width="525">     
    <Window.Resources>     
        </a x:Key="Data" Source="<a>file:///c:/blogs/larsschmitt/Contact.xml" XPath="/contacts"/>     
    </Window.Resources>     
    <Grid>     
        <DataGrid DataContext="{StaticResource Data}" ItemsSource="{Binding XPath=ContactItem}" AutoGenerateColumns="False">     
            <DataGrid.Columns>     
                <DataGridTextColumn Binding="{Binding XPath=FirstName}" Header="Firstname"/>     
                <DataGridTextColumn Binding="{Binding XPath=LastName}" Header="Lastname"/>     
            </DataGrid.Columns>     
        </DataGrid>     
    </Grid>     
</Window>     

 

 

Normalerweise bin ich unter WPF kein Freund des Designers, jedoch an dieser stelle, lohnt es sich auch mal ein Blick in den Designers des neue Visual Studio 2010 zu werfen.

 

image



So richtig interessant wird es jedoch erst, mitsamt der neuen Version vom Visual Studio.

 

Ein kleiner Klick auf das Label, mit der Aufschrift Generate Columns erzeugt mit dieser Datenquelle.

  

<Grid>    
        <DataGrid DataContext="{StaticResource Data}" ItemsSource="{Binding XPath=ContactItem}" AutoGenerateColumns="False">     
            <DataGrid.Columns>     
                <DataGridTextColumn Binding="{Binding XPath=FirstName}" Header="Firstname"/>     
                <DataGridTextColumn Binding="{Binding XPath=LastName}" Header="Lastname"/>     
                <DataGridTextColumn Binding="{Binding Path=Name, Mode=OneWay}" Header="Name" IsReadOnly="True" />     
                <DataGridTextColumn Binding="{Binding Path=Value}" Header="Value" />     
                <DataGridComboBoxColumn Header="NodeType" IsReadOnly="True" SelectedItemBinding="{Binding Path=NodeType, Mode=OneWay}" />     
                <DataGridTextColumn Binding="{Binding Path=ParentNode, Mode=OneWay}" CanUserSort="False" Header="ParentNode" IsReadOnly="True" />     
                <DataGridTextColumn Binding="{Binding Path=ChildNodes, Mode=OneWay}" CanUserSort="False" Header="ChildNodes" IsReadOnly="True" />     
                <DataGridTextColumn Binding="{Binding Path=PreviousSibling, Mode=OneWay}" CanUserSort="False" Header="PreviousSibling" IsReadOnly="True" />     
                <DataGridTextColumn Binding="{Binding Path=NextSibling, Mode=OneWay}" CanUserSort="False" Header="NextSibling" IsReadOnly="True" />     
                <DataGridTextColumn Binding="{Binding Path=Attributes, Mode=OneWay}" CanUserSort="False" Header="Attributes" IsReadOnly="True" />     
                <DataGridTextColumn Binding="{Binding Path=OwnerDocument, Mode=OneWay}" CanUserSort="False" Header="OwnerDocument" IsReadOnly="True" />     
                <DataGridTextColumn Binding="{Binding Path=FirstChild, Mode=OneWay}" CanUserSort="False" Header="FirstChild" IsReadOnly="True" />     
                <DataGridTextColumn Binding="{Binding Path=LastChild, Mode=OneWay}" CanUserSort="False" Header="LastChild" IsReadOnly="True" />     
                <DataGridCheckBoxColumn Binding="{Binding Path=HasChildNodes, Mode=OneWay}" Header="HasChildNodes" IsReadOnly="True" />     
                <DataGridTextColumn Binding="{Binding Path=NamespaceURI, Mode=OneWay}" Header="NamespaceURI" IsReadOnly="True" />     
                <DataGridTextColumn Binding="{Binding Path=Prefix}" Header="Prefix" />     
                <DataGridTextColumn Binding="{Binding Path=LocalName, Mode=OneWay}" Header="LocalName" IsReadOnly="True" />     
                <DataGridCheckBoxColumn Binding="{Binding Path=IsReadOnly, Mode=OneWay}" Header="IsReadOnly" IsReadOnly="True" />     
                <DataGridTextColumn Binding="{Binding Path=InnerText}" Header="InnerText" />     
                <DataGridTextColumn Binding="{Binding Path=OuterXml, Mode=OneWay}" Header="OuterXml" IsReadOnly="True" />     
                <DataGridTextColumn Binding="{Binding Path=InnerXml}" Header="InnerXml" />     
                <DataGridTextColumn Binding="{Binding Path=SchemaInfo, Mode=OneWay}" CanUserSort="False" Header="SchemaInfo" IsReadOnly="True" />     
                <DataGridTextColumn Binding="{Binding Path=BaseURI, Mode=OneWay}" Header="BaseURI" IsReadOnly="True" />     
            </DataGrid.Columns>     
        </DataGrid>     
    </Grid>  

Aber was ist, wenn man nur einige Spalten braucht?

Auch an dieser Stelle, kann das Visual Studio helfen. Hinter dem Label mit der Aufschrift Edit Property-Bound Columns verbirgt sich ein Fenster, in dem man auch einzelne Spalten auswählen kann.

image

 

Meiner Meinung nach rücken mit diesem sehr gut gelungenen Control, komplett mit den WPF-Core Controls entwickelte Business Anwendungen, einen großen Schritt näher.

Das neue Calendar Steuerelement

Da der Release Termin, für das .Net Framework 4.0 immer näher rückt (12.04.2010), möchte ich an dieser Stelle, mal einen kleinen Blick auf die (neuen) Controls werfen.

 

Das Calendar Control ist ganz klar ein Teilprodukt des DatePicker und bietet so dem Entwickler, eine weitere Möglichkeit der Datumsauswahl.

Dieses Steuerelement, kann mittels des Properties DisplayMode in seine 3 Initial Ansichten betrieben werden.

 

image

DisplayMode Month

Die Default mäßige Ansicht des neun Calendar Controls, im diesem kann der Tag des im oben angegebenen Zeitraumes ausgewählt werden.

Mit einem Klick auf das obere Label ‘April 2010’, gelangt der Anwender zur der zweiten von 3 möglichen Ansichten, dieses Steuerelements.

image

‘DisplayMode Year’

Wie unschwer zu erkennen, kann der Anwender an dieser Stelle den Betreffende Monat ausgewählt werden

 

Mit einem weitere Klick auf das Jahr gelangt der Anwender zur letzten Ansicht dieses Steuerlements

image

DisplayMode Decade

Zu guter letzt wird an dieser Stelle das betreffende Jahr ausgewählt

 

Des weiteren bietet dieses Control, das nette Feature der unterschiedlichen Selektionsweisen.

  • SingleDate     (nur ein Tag wählbar)
  • SingleRange   (einen zusammenhängenden Zeitraum auswählen)
  • MultiRange    (verschiedenen nicht zusammenhängende Zeiträume mittels der STRG auswählen)
  • None             ( was macht diese Funktion doch gleich  ????)
Posted: Apr 06 2010, 08:00 von Lars Schmitt | mit 2 comment(s)
Abgelegt unter: ,
Zugriff aus dem XAML-Code auf Properties in einer Nested Classes

Problem: Mal angenommen, während einer Entwicklungsphase will man per XAML-Code auf verschiedene Properties aus einer wie unten zu sehenden Nested Class zugreifen.

  

public class OuterClass{  

    public class InnerClass{  

        static InnerClass(){  

            Foo = “Testausdruck”;  

        }  

        public static string Foo{ get; set; }  

   }  

}  

Wer schon einmal versucht per Dot Notation auf dieses Property zuzugreifen, kennt die Resultierende Fehlermeldung ‘Der Typ "OuterClass.InnerClass"wurde nicht gefunden. Beachten Sie, dass bei Typnamen die Groß- und Kleinschreibung berücksichtigt wird.’   

 

  

<Window x:Class="WpfApplication16.Window1"   
    xmlns="<a href="http://schemas.microsoft.com/winfx/2006/xaml/presentation"">http://schemas.microsoft.com/winfx/2006/xaml/presentation"</a    
    xmlns:x="<a href=">http://schemas.microsoft.com/winfx/2006/xaml"">http://schemas.microsoft.com/winfx/2006/xaml"</a    
    xmlns:Foo="clr-namespace:WpfApplication16"    
    Title="Window1" Height="300" Width="300">    
    <Grid>    
        <Button Content="{Binding Source={x:Static Foo:OuterClass.InnerClass.Foo}}"/>    
    </Grid>    
</Window>  

 

Hmm Der Code sieht doch eigentlich richtig aus …      

Doch natürlich würde ich nicht darüber schreiben, wenn es nicht auch dafür eine Lösung geben würde

  

<Window x:Class="WpfApplication16.Window1"   
    xmlns="<a href="http://schemas.microsoft.com/winfx/2006/xaml/presentation"">http://schemas.microsoft.com/winfx/2006/xaml/presentation"</a    
    xmlns:x="<a href=">http://schemas.microsoft.com/winfx/2006/xaml"">http://schemas.microsoft.com/winfx/2006/xaml"</a    
    xmlns:Foo="clr-namespace:WpfApplication16"    
    Title="Window1" Height="300" Width="300">    
    <Grid>    
        <Button Content="{Binding Source={x:Static Foo:OuterClass+InnerClass.Foo}}"/>    
    </Grid>    
</Window>   

 

 

 

 

Wer findet den Unterschied?

 

 

 

Nein keine Sorge, wir spielen jetzt nicht suche den Unterschied, Der unterschied Liegt im ‘+’   {Binding Source={x:Static Foo:OuterClass -------->+<--------InnerClass.Foo}},  aber seit ehrlich, hättet ihr den Unterschied gefunden???????

Posted: Feb 15 2010, 07:40 von Lars Schmitt | mit 2 comment(s)
Abgelegt unter: ,
VS 2010

So, nachdem seit Montag, der Download des RC’s vom Visual Studio 2010 nur für MSDN-Abonnenten verfügbar war, stehen nun seit kurzem die unterschiedlichen Versionen, für jedem unter http://msdn.microsoft.com/en-us/vstudio/dd582936.aspx zum Download Bereit.

VS 2010 Professional

Gerade eben habe ich eine E-Mail vom AzureNow Gewinnspiel erhalten, mit der Folgenden Mitteilung

‘wir bedanken uns noch einmal für Ihre Teilnahme am AzureNow Gewinnspiel. In der letzten Woche wurden die Gewinner ermittelt und wir freuen uns Ihnen mitteilen zu können, dass Sie den folgenden Preis gewonnen haben:

Das neue Microsoft Visual Studio Professional 2010  als Downloadversion!’

Für diesen Gewinn möchte ich mich Herzlichst bedanken

n Strings in WPF zusammensetzten

In einer unserer Anwendungen haben wir die Anforderung, dass sich jeder einzelne Window Title, aus einem Namen für das jeweilige Fenster und dem jeweiligen variablen Firmen Namen zusammengesetzt wird. Eigentlich wäre für diesen Sachverhalt alleine kein Blogeintrag notwendig, schließlich gibt es für dieses Vorhaben ja auch genug Möglichkeiten. Jedoch wie ich erst kürzlich wieder lesen konnte, sieht so manch einer aufgrund der Vielzahl an Möglichkeiten den Wald vor lauter Bäumen nicht.

So möchte ich an dieser Stelle, mal zwei Lösungsmöglichkeiten, der Öffentlichkeit etwas näher bringen.

 

Für diesen Anwendungsfall gibt es eine Vielzahl von Lösungsmöglichkeiten, sei es mit einem AttachedProperty, Implementierung eines eigenen Windows, ein im Backend Definiertes Propperty, dass per Binding an die Oberfläche gebunden wird, … alles Möglichkeiten die mir so auf die schnelle einfallen, doch wie so oft es gibt noch weitere.

Wie Z.B. über einen Converter, wie diesen hier

public class AddUnternehmen : IValueConverter 
    { 
        #region IValueConverter Member 


        public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture) 
        { 
            return string.Format("{0} - {1}", value, GlobaleDaten.AllgemeineEinstellungen.Singleton.AuthUnternehmen); 
        } 


        public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture) 
        { 
            throw new NotImplementedException(); 
        } 


        #endregion 
    }

Nachdem dieser den Application.Resources hinzugefügt wurde,

<Application.Resources> 
       <conv:AddUnternehmen x:Key="AddFirma"/> 
</Application.Resources>

kann er nun zum zusammensetzen, des Window Title benutzt werden.

<Window.Title> 
    <Binding Converter=”{StaticResource AddFirma}”> 
        <Binding.Source> 


            <!--xmlns:clr="clr-namespace:System;assembly=mscorlib"--> 
            <clr:String>Globale Suche</clr:String> 
        </Binding.Source> 
    </Binding> 
</Window.Title>

 

Und zum Ende noch die zweite versprochene Möglichkeit, welches diesen Anwendungsfall per MultiBinding zu Lösen versucht.

<Window.Title> 
    <MultiBinding StringFormat="{}{0} - {1}"> 
        <Binding> 
            <Binding.Source>


                <!--xmlns:clr="clr-namespace:System;assembly=mscorlib"-->                 
                <clr:String>Globale Suche</clr:String> 
            </Binding.Source> 
        </Binding>


        <!—xmlns:clr="clr-namespace:…"-->                 
        <Binding Path="AuthUnternehmen" Source="{x:Static Glob:AllgemeineEinstellungen.Singleton}"/> 
    </MultiBinding> 
</Window.Title>

Posted: Jan 14 2010, 09:49 von Lars Schmitt | mit 4 comment(s)
Abgelegt unter:
Mehr Beiträge Nächste Seite »