<?xml version="1.0" encoding="UTF-8"?>
<!-- generator="wordpress/2.2.1" -->
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	>

<channel>
	<title>Michael Niethammers Blog</title>
	<link>http://blog.moggl.eu</link>
	<description>Tipps und Tricks</description>
	<pubDate>Wed, 10 Feb 2010 16:10:08 +0000</pubDate>
	<generator>http://wordpress.org/?v=2.2.1</generator>
	<language>en</language>
			<item>
		<title>Linq to SQL Fremdschl&#252;ssel programmatisch umsetzen</title>
		<link>http://blog.moggl.eu/2010/02/10/linq-to-sql-fremdschlssel-programmatisch-umsetzen/</link>
		<comments>http://blog.moggl.eu/2010/02/10/linq-to-sql-fremdschlssel-programmatisch-umsetzen/#comments</comments>
		<pubDate>Wed, 10 Feb 2010 16:10:08 +0000</pubDate>
		<dc:creator>admin</dc:creator>
		
		<category><![CDATA[SQL Server]]></category>

		<category><![CDATA[C#]]></category>

		<category><![CDATA[LINQ]]></category>

		<category><![CDATA[.Net / Visual Studio]]></category>

		<guid isPermaLink="false">http://blog.moggl.eu/2010/02/10/linq-to-sql-fremdschlssel-programmatisch-umsetzen/</guid>
		<description><![CDATA[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”.&#160; Als Entwickler ist man geneigt einfach den Foreign-Key mit dem anderen Schlüssel zu ersetzen. In Linq führt [...]]]></description>
			<content:encoded><![CDATA[<p>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”.&#160; Als Entwickler ist man geneigt einfach den Foreign-Key mit dem anderen Schlüssel zu ersetzen. In Linq führt das zu einer Exception: </p>
<p> <a href="http://blog.moggl.eu/__oneclick_uploads/2010/02/image.png"><img style="border-bottom: 0px; border-left: 0px; display: block; float: none; margin-left: auto; border-top: 0px; margin-right: auto; border-right: 0px" title="image" border="0" alt="image" src="http://blog.moggl.eu/__oneclick_uploads/2010/02/image-thumb.png" width="407" height="33" /></a>
<p><a href="http://blog.moggl.eu/__oneclick_uploads/2010/02/image1.png"><img style="border-bottom: 0px; border-left: 0px; display: block; float: none; margin-left: auto; border-top: 0px; margin-right: auto; border-right: 0px" title="image" border="0" alt="image" src="http://blog.moggl.eu/__oneclick_uploads/2010/02/image-thumb1.png" width="701" height="207" /></a> </p>
<p>Lösung:    <br />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!</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.moggl.eu/2010/02/10/linq-to-sql-fremdschlssel-programmatisch-umsetzen/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Silverlight und MEF</title>
		<link>http://blog.moggl.eu/2010/01/29/silverlight-und-mef/</link>
		<comments>http://blog.moggl.eu/2010/01/29/silverlight-und-mef/#comments</comments>
		<pubDate>Fri, 29 Jan 2010 07:01:42 +0000</pubDate>
		<dc:creator>admin</dc:creator>
		
		<category><![CDATA[Silverlight]]></category>

		<category><![CDATA[.Net / Visual Studio]]></category>

		<guid isPermaLink="false">http://blog.moggl.eu/2010/01/29/silverlight-und-mef/</guid>
		<description><![CDATA[Auf meinem Silverlight 4 Vortrag bei der .NET User Group Stuttgart am Mittwoch habe ich auch kurz MEF erwähnt, ohne Details dazu zu zeigen. Wer wissen will, was sich hinter diesen drei Buchstaben verbirgt, kann sich folgendes Video mal ansehen: Silverlight TV Episode 4: 3 Steps to MEF - Export, Import, Compose.
]]></description>
			<content:encoded><![CDATA[<p>Auf meinem Silverlight 4 Vortrag bei der .NET User Group Stuttgart am Mittwoch habe ich auch kurz MEF erwähnt, ohne Details dazu zu zeigen. Wer wissen will, was sich hinter diesen drei Buchstaben verbirgt, kann sich folgendes Video mal ansehen: <a href="http://channel9.msdn.com/shows/SilverlightTV/Silverlight-TV-Episode-4-3-Steps-to-MEF-Export-Import-Compose/">Silverlight TV Episode 4: 3 Steps to MEF - Export, Import, Compose</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.moggl.eu/2010/01/29/silverlight-und-mef/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Silverlight Out o Browser Anwendungen debuggen</title>
		<link>http://blog.moggl.eu/2010/01/25/silverlight-out-o-browser-anwendungen-debuggen/</link>
		<comments>http://blog.moggl.eu/2010/01/25/silverlight-out-o-browser-anwendungen-debuggen/#comments</comments>
		<pubDate>Mon, 25 Jan 2010 14:08:13 +0000</pubDate>
		<dc:creator>admin</dc:creator>
		
		<category><![CDATA[Silverlight]]></category>

		<guid isPermaLink="false">http://blog.moggl.eu/2010/01/25/silverlight-out-o-browser-anwendungen-debuggen/</guid>
		<description><![CDATA[&#160;
Lässt man Silverlight 4 Anwendungen im “Out of Browser Modus” laufen hat man erheblich mehr Möglichkeiten wie bisher. Durch die Möglichkeit in Silverlight 4 die Berechtigungsstufe zu erhöhen, kann man dann auf lokale COM-Server, die lokale Hardware und aufs File-System direkt zugreifen. All’ das macht Silverlight-Anwendungen vor allem im Intranet sehr interessant! Allerdings stolpert man [...]]]></description>
			<content:encoded><![CDATA[<p>&#160;</p>
<p>Lässt man Silverlight 4 Anwendungen im “Out of Browser Modus” laufen hat man erheblich mehr Möglichkeiten wie bisher. Durch die Möglichkeit in Silverlight 4 die Berechtigungsstufe zu erhöhen, kann man dann auf lokale COM-Server, die lokale Hardware und aufs File-System direkt zugreifen. All’ das macht Silverlight-Anwendungen vor allem im Intranet sehr interessant! Allerdings stolpert man hier in ein kleines Problem: Das Debuggen solcher Anwendungen ist nicht mehr so leicht möglich. Viele Entwickler hängen sich mit dem Debugger einfach an den entsprechenden Prozess an, doch auf diese Weise kann man nicht so komfortabel an alle Dinge heran kommen. So geht es bequemer:</p>
<p>1.) Die Silverlight Anwendung neu erstellen wobei die Start-Anwendung des Web-Projekt der Solution sein muss</p>
<p>2.) Die Silverlight Anwendung als Out-Of-Browser Anwendung auf der Maschine installieren (rechte Maustaste in der laufenden Anwendung)</p>
<p>3.) Anwendung beenden, die Silverlight-Anwendung in der Solution als StartProjekt festlegen</p>
<p>4.) In der Solution auf den Projekteigenschaften der Silverlight-Anwendung unter Debug die Einstellung “Installed out of Browser application” markieren</p>
<p><a href="http://blog.moggl.eu/__oneclick_uploads/2010/01/image.png"><img style="border-right-width: 0px; display: block; float: none; border-top-width: 0px; border-bottom-width: 0px; margin-left: auto; border-left-width: 0px; margin-right: auto" title="image" border="0" alt="image" src="http://blog.moggl.eu/__oneclick_uploads/2010/01/image-thumb.png" width="476" height="238" /></a> </p>
<p>5.) Breakpoints setzen und Anwendung mit &lt;F5&gt; starten. Jetzt hält die Anwendung an den Breakpoints wie gewohnt an. </p>
]]></content:encoded>
			<wfw:commentRss>http://blog.moggl.eu/2010/01/25/silverlight-out-o-browser-anwendungen-debuggen/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Verwendung der WPF ComboBox mit Linq</title>
		<link>http://blog.moggl.eu/2009/11/25/verwendung-der-wpf-combobox-mit-linq/</link>
		<comments>http://blog.moggl.eu/2009/11/25/verwendung-der-wpf-combobox-mit-linq/#comments</comments>
		<pubDate>Wed, 25 Nov 2009 09:00:39 +0000</pubDate>
		<dc:creator>admin</dc:creator>
		
		<category><![CDATA[C#]]></category>

		<category><![CDATA[LINQ]]></category>

		<category><![CDATA[WPF]]></category>

		<guid isPermaLink="false">http://blog.moggl.eu/2009/11/25/verwendung-der-wpf-combobox-mit-linq/</guid>
		<description><![CDATA[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:

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 [...]]]></description>
			<content:encoded><![CDATA[<p>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.</p>
<p>Folgende Tabellen liegen diesem Beispiel zugrunde:</p>
<p><a href="http://blog.moggl.eu/__oneclick_uploads/2009/11/image1.png"><img border="0" src="http://blog.moggl.eu/__oneclick_uploads/2009/11/image-thumb1.png" alt="image" style="display: inline; border: 0px" title="image" height="368" width="590" /></a></p>
<p>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.</p>
<p>In meiner Pflegemaske ist die Liste der Mitarbeiter so definiert:</p>
<p><a href="http://blog.moggl.eu/__oneclick_uploads/2009/11/image2.png"><img border="0" src="http://blog.moggl.eu/__oneclick_uploads/2009/11/image-thumb2.png" alt="image" style="display: inline; border: 0px" title="image" height="163" width="870" /></a></p>
<p>In meiner Pflegemaske ist die Combo so definiert:</p>
<p><a href="http://blog.moggl.eu/__oneclick_uploads/2009/11/image3.png"><img border="0" src="http://blog.moggl.eu/__oneclick_uploads/2009/11/image-thumb3.png" alt="image" style="display: inline; border: 0px" title="image" height="90" width="993" /></a></p>
<p>Und im Codebehind der Maske werden die Daten wie folgt geladen:</p>
<p><a href="http://blog.moggl.eu/__oneclick_uploads/2009/11/image4.png"><img border="0" src="http://blog.moggl.eu/__oneclick_uploads/2009/11/image-thumb4.png" alt="image" style="display: inline; border: 0px" title="image" height="267" width="728" /></a></p>
<p>Ganz wichtig damit der Refresh der Combobox richtig funktioniert:</p>
<p>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.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.moggl.eu/2009/11/25/verwendung-der-wpf-combobox-mit-linq/feed/</wfw:commentRss>
		</item>
		<item>
		<title>MDA (Managed Debug Assitant) Fehler unterbinden</title>
		<link>http://blog.moggl.eu/2009/11/04/mda-managed-debug-assitant-fehler-unterbinden/</link>
		<comments>http://blog.moggl.eu/2009/11/04/mda-managed-debug-assitant-fehler-unterbinden/#comments</comments>
		<pubDate>Wed, 04 Nov 2009 09:58:55 +0000</pubDate>
		<dc:creator>admin</dc:creator>
		
		<category><![CDATA[.Net / Visual Studio]]></category>

		<category><![CDATA[C# Allgemein]]></category>

		<guid isPermaLink="false">http://blog.moggl.eu/2009/11/04/mda-managed-debug-assitant-fehler-unterbinden/</guid>
		<description><![CDATA[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 [...]]]></description>
			<content:encoded><![CDATA[<p>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ü&#160; Debug – Exceptions – Managed Debug Assistants deaktivieren/einschalten</p>
<p><a href="http://blog.moggl.eu/__oneclick_uploads/2009/11/image.png"><img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="image" border="0" alt="image" src="http://blog.moggl.eu/__oneclick_uploads/2009/11/image-thumb.png" width="628" height="365" /></a> </p>
<p>Danach läuft die Anwendung in der Regel ohne anzuhalten durch.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.moggl.eu/2009/11/04/mda-managed-debug-assitant-fehler-unterbinden/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Silerlight RIA Services</title>
		<link>http://blog.moggl.eu/2009/10/13/silerlight-ria-services/</link>
		<comments>http://blog.moggl.eu/2009/10/13/silerlight-ria-services/#comments</comments>
		<pubDate>Tue, 13 Oct 2009 06:24:49 +0000</pubDate>
		<dc:creator>admin</dc:creator>
		
		<category><![CDATA[Silverlight]]></category>

		<category><![CDATA[WCF]]></category>

		<guid isPermaLink="false">http://blog.moggl.eu/2009/10/13/silerlight-ria-services/</guid>
		<description><![CDATA[Derzeit bin ich daran mir die RIA Services für Silverlight mal etwas genauer anzusehen. Grundsätzlich ist der Ansatz sowohl von der Architektur als auch vom Komfort der Genertoren sehr vielversprechend.
Ich habe mir also das RIA Toolkit runtergeladen und gemäß der beschreibung mal ein Beispielprojekt angelegt. Funktionierte alles prima bis auf die Tatsache, daß sich das [...]]]></description>
			<content:encoded><![CDATA[<p>Derzeit bin ich daran mir die RIA Services für Silverlight mal etwas genauer anzusehen. Grundsätzlich ist der Ansatz sowohl von der Architektur als auch vom Komfort der Genertoren sehr vielversprechend.</p>
<p>Ich habe mir also das RIA Toolkit runtergeladen und gemäß der beschreibung mal ein Beispielprojekt angelegt. Funktionierte alles prima bis auf die Tatsache, daß sich das Projekt nicht kompilieren lässt!:</p>
<p><font color="#0000ff">Warning&#160;&#160;&#160; 1&#160;&#160;&#160; The &quot;CreateRiaClientFilesTask&quot; task failed unexpectedly.     <br />System.Security.SecurityException: Request for the permission of type &#8216;System.Web.AspNetHostingPermission, System, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089&#8242; failed.      <br />&#160;&#160; at System.Reflection.Assembly._GetExportedTypes()      <br />&#160;&#160; at System.Reflection.Assembly.GetExportedTypes()      <br />&#160;&#160; at System.Web.DomainServices.Tools.AssemblyUtilities.GetExportedTypes(Assembly assembly, ILogger logger)      <br />&#160;&#160; at System.Web.DomainServices.Tools.DomainServiceCatalog.AddDomainServiceDescriptions()      <br />&#160;&#160; at System.Web.DomainServices.Tools.DomainServiceCatalog..ctor(IEnumerable`1 assemblies, IEnumerable`1 references, ILogger logger)      <br />&#160;&#160; at System.Web.DomainServices.Tools.ClientProxyGenerator..ctor(String language, IEnumerable`1 assemblies, IEnumerable`1 references, ILogger logger)      <br />&#160;&#160; at System.Web.DomainServices.Tools.CreateRiaClientFilesTask.GenerateClientProxies()      <br />&#160;&#160; at System.Web.DomainServices.Tools.CreateRiaClientFilesTask.Execute()      <br />&#160;&#160; at Microsoft.Build.Framework.ITask.Execute()      <br />&#160;&#160; at Microsoft.Build.BuildEngine.TaskEngine.ExecuteInstantiatedTask(EngineProxy engineProxy, ItemBucket bucket, TaskExecutionMode howToExecuteTask, ITask task, Boolean&amp; taskResult)      <br /></font></p>
<p>Nach viel Sucherei habe ich den Fhler inzwischen auch gefunden: Wenn mans weiß ist es wie immer ganz einfach. Sobald man solche Projekte auf einem gemappten Laufwerk eines anderen PCs laufen lässt kommt es zu dieser Meldung. Entweder muss man dann die Berechtigungen entsprechend anpassen oder das Projekt verlegen.</p>
<p>Demnächst gibts hier mehr Infos zu diesem Thema.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.moggl.eu/2009/10/13/silerlight-ria-services/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Databinding und Stringformatierung seit SP1 – das ist an mir vorbei gegangen</title>
		<link>http://blog.moggl.eu/2009/10/07/databinding-und-stringformatierung-seit-sp1-%e2%80%93-das-ist-an-mir-vorbei-gegangen/</link>
		<comments>http://blog.moggl.eu/2009/10/07/databinding-und-stringformatierung-seit-sp1-%e2%80%93-das-ist-an-mir-vorbei-gegangen/#comments</comments>
		<pubDate>Wed, 07 Oct 2009 11:58:46 +0000</pubDate>
		<dc:creator>admin</dc:creator>
		
		<category><![CDATA[Silverlight]]></category>

		<category><![CDATA[Visual Studio]]></category>

		<guid isPermaLink="false">http://blog.moggl.eu/2009/10/07/databinding-und-stringformatierung-seit-sp1-%e2%80%93-das-ist-an-mir-vorbei-gegangen/</guid>
		<description><![CDATA[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:
&#60;TextBlock&#62;
        &#60;TextBlock.Text&#62;

                &#60;Binding ElementName=&#8221;myComboBox&#8221; [...]]]></description>
			<content:encoded><![CDATA[<p>Wenn man in WPF oder Silverlight Daten an ein Control bindet kann man die Daten püber einfach zu erstellende Konverter<br />
Klassen konvertieren bevor sie angezeigt werden bzw. bevor sie zurückgeschrieben werden. Das war bisher so.</p>
<p>Seit dem ServicePack1 von Visual Studio 2008 kan man – zumindest bei den alltäglichen Konvertierungen – eine stark vereinfachte<br />
Syntax verwenden:</p>
<p style="background: #f6f5f0 none repeat scroll 0% 0%; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial; margin-left: 7pt"><span style="font-family: Courier New; font-size: 10pt"><span style="color: blue">&lt;</span><span style="color: #a31515">TextBlock</span><span style="color: blue">&gt;</span></span></p>
<p style="background: #f6f5f0 none repeat scroll 0% 0%; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial; margin-left: 7pt"><span style="font-family: Courier New; font-size: 10pt"><span style="color: blue">        &lt;</span><span style="color: #a31515">TextBlock.Text</span><span style="color: blue">&gt;<br />
</span></span></p>
<p style="background: #f6f5f0 none repeat scroll 0% 0%; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial; margin-left: 7pt"><span style="font-family: Courier New; font-size: 10pt"><span style="color: blue">                &lt;</span><span style="color: #a31515">Binding</span><span style="color: red"> ElementName</span><span style="color: blue">=&#8221;myComboBox&#8221; </span><span style="color: red">Path</span><span style="color: blue">=&#8221;SelectedItem.Content&#8221;</span><span style="color: red"> StringFormat</span><span style="color: blue">=&#8221;{}{0:C}&#8221;/&gt;<br />
</span></span></p>
<p style="background: #f6f5f0 none repeat scroll 0% 0%; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial; margin-left: 7pt"><span style="font-family: Courier New; font-size: 10pt"><span style="color: blue">        &lt;/</span><span style="color: #a31515">TextBlock.Text</span><span style="color: blue">&gt;<br />
</span></span></p>
<p style="background: #f6f5f0 none repeat scroll 0% 0%; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial; margin-left: 7pt"><span style="font-family: Courier New; font-size: 10pt"><span style="color: blue">&lt;/</span><span style="color: #a31515">TextBlock</span><span style="color: blue">&gt;</span></span><span style="font-family: Times New Roman; font-size: 12pt"><br />
</span></p>
<p style="background: #f6f5f0 none repeat scroll 0% 0%; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial; margin-left: 7pt">&nbsp;</p>
<p style="background: #f6f5f0 none repeat scroll 0% 0%; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial; margin-left: 7pt"><span style="font-family: Courier New; font-size: 10pt"><span style="color: blue">&lt;</span><span style="color: #a31515">GridViewColumn </span><span style="color: red">Header</span><span style="color: blue">=&#8221;Price&#8221; </span><span style="color: red">DisplayMemberBinding</span><span style="color: blue">=&#8221;{</span><span style="color: #a31515">Binding</span><span style="color: red"> Path</span><span style="color: blue">=Price, </span><span style="color: red">StringFormat</span><span style="color: blue">=C}&#8221;/&gt;</span></span><span style="font-family: Times New Roman; font-size: 12pt"><br />
</span></p>
<p style="background: #f6f5f0 none repeat scroll 0% 0%; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial; margin-left: 7pt"><span style="font-family: Courier New; font-size: 10pt"><span style="color: blue">&lt;</span><span style="color: #a31515">TextBlock</span><span style="color: blue">&gt;<br />
</span></span></p>
<p style="background: #f6f5f0 none repeat scroll 0% 0%; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial; margin-left: 7pt"><span style="font-family: Courier New; font-size: 10pt"><span style="color: blue">        &lt;</span><span style="color: #a31515">TextBlock.Text</span><span style="color: blue">&gt;<br />
</span></span></p>
<p style="background: #f6f5f0 none repeat scroll 0% 0%; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial; margin-left: 7pt"><span style="font-family: Courier New; font-size: 10pt"><span style="color: blue">            &lt;</span><span style="color: #a31515">MultiBinding</span><span style="color: red"> StringFormat</span><span style="color: blue">=&#8221;Item1 cost: {0}, Item2 cost: {1}&#8221;&gt;<br />
</span></span></p>
<p style="background: #f6f5f0 none repeat scroll 0% 0%; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial; margin-left: 7pt"><span style="font-family: Courier New; font-size: 10pt"><span style="color: blue">                &lt;</span><span style="color: #a31515">Binding</span><span style="color: red"> ElementName</span><span style="color: blue">=&#8221;myComboBox&#8221; </span><span style="color: red">Path</span><span style="color: blue">=&#8221;SelectedItem.Content&#8221;/&gt;<br />
</span></span></p>
<p style="background: #f6f5f0 none repeat scroll 0% 0%; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial; margin-left: 7pt"><span style="font-family: Courier New; font-size: 10pt"><span style="color: blue">                &lt;</span><span style="color: #a31515">Binding</span><span style="color: red"> ElementName</span><span style="color: blue">=&#8221;myComboBox2&#8243;</span><span style="color: red"> Path</span><span style="color: blue">=&#8221;SelectedItem.Content&#8221;/&gt;<br />
</span></span></p>
<p style="background: #f6f5f0 none repeat scroll 0% 0%; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial; margin-left: 7pt"><span style="font-family: Courier New; font-size: 10pt"><span style="color: blue">            &lt;/</span><span style="color: #a31515">MultiBinding</span><span style="color: blue">&gt;<br />
</span></span></p>
<p style="background: #f6f5f0 none repeat scroll 0% 0%; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial; margin-left: 7pt"><span style="font-family: Courier New; font-size: 10pt"><span style="color: blue">        &lt;/</span><span style="color: #a31515">TextBlock.Text</span><span style="color: blue">&gt;<br />
</span></span></p>
<p style="background: #f6f5f0 none repeat scroll 0% 0%; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial; margin-left: 7pt"><span style="font-family: Courier New; font-size: 10pt"><span style="color: blue">&lt;/</span><span style="color: #a31515">TextBlock</span><span style="color: blue">&gt;</span></span><span style="font-family: Times New Roman; font-size: 12pt"><br />
</span></p>
<p>Die Angabe des Stringformats gibt uns die Möglichkeit zumindest einfach Konertierungen ohne eigene Klasse vorzunehmen. Hierbei kann<br />
man d für kurze Datumsangaben, D für lange Datumsangaben, c für Währung und P für Prozentangaben.</p>
<p>Alternativ gibt es auch noch das Contentstringformat mit dem man komplexere Konvertierungen vornehmen kann:</p>
<p style="background: #f6f5f0 none repeat scroll 0% 0%; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial; margin-left: 7pt"><span style="font-family: Courier New; font-size: 10pt"><span style="color: blue">&lt;</span><span style="color: #a31515">Label</span><span style="color: red"> ContentStringFormat</span><span style="color: blue">=&#8221;dddd – d - MMMM&#8221;&gt;<br />
</span></span></p>
<p style="background: #f6f5f0 none repeat scroll 0% 0%; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial; margin-left: 7pt"><span style="font-family: Courier New; font-size: 10pt"><span style="color: #a31515">      </span><span style="color: blue">&lt;</span><span style="color: #a31515">sys</span><span style="color: blue">:</span><span style="color: #a31515">DateTime</span><span style="color: blue">&gt;</span><span style="color: #a31515">2004/3/4 13:6:55</span><span style="color: blue">&lt;/</span><span style="color: #a31515">sys</span><span style="color: blue">:</span><span style="color: #a31515">DateTime</span><span style="color: blue">&gt;<br />
</span></span></p>
<p style="background: #f6f5f0 none repeat scroll 0% 0%; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial; margin-left: 7pt"><span style="font-family: Courier New; font-size: 10pt"><span style="color: blue">&lt;/</span><span style="color: #a31515">Label</span><span style="color: blue">&gt;<br />
</span></span></p>
<p style="background: #f6f5f0 none repeat scroll 0% 0%; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial; margin-left: 7pt">&nbsp;</p>
<p style="background: #f6f5f0 none repeat scroll 0% 0%; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial; margin-left: 7pt"><span style="font-family: Courier New; font-size: 10pt"><span style="color: blue">&lt;</span><span style="color: #a31515">Button</span><span style="color: red"> ContentStringFormat</span><span style="color: blue">=&#8221;{}{0:MM/dd/yyyy}&#8221;&gt;<br />
</span></span></p>
<p style="background: #f6f5f0 none repeat scroll 0% 0%; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial; margin-left: 7pt"><span style="font-family: Courier New; font-size: 10pt"><span style="color: blue">        &lt;</span><span style="color: #a31515">sys</span><span style="color: blue">:</span><span style="color: #a31515">DateTime</span><span style="color: blue">&gt;</span><span style="color: #a31515">2004/3/4 13:6:55</span><span style="color: blue">&lt;/</span><span style="color: #a31515">sys</span><span style="color: blue">:</span><span style="color: #a31515">DateTime</span><span style="color: blue">&gt;</span><span style="color: #a31515"><br />
</span></span></p>
<p style="background: #f6f5f0 none repeat scroll 0% 0%; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial; margin-left: 7pt"><span style="font-family: Courier New; font-size: 10pt"><span style="color: blue">&lt;/</span><span style="color: #a31515">Button</span><span style="color: blue">&gt;</span><span style="color: #a31515"><br />
</span></span></p>
<p style="background: #f6f5f0 none repeat scroll 0% 0%; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial; margin-left: 7pt">&nbsp;</p>
<p style="background: #f6f5f0 none repeat scroll 0% 0%; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial; margin-left: 7pt"><span style="font-family: Courier New; font-size: 10pt"><span style="color: blue">&lt;</span><span style="color: #a31515">ListBox</span><span style="color: red"> Name</span><span style="color: blue">=&#8221;lb1&#8243;</span><span style="color: red"> SelectedIndex</span><span style="color: blue">=&#8221;1&#8243;</span><span style="color: red"> ItemStringFormat</span><span style="color: blue">=&#8221;F1&#8243;&gt;<br />
</span></span></p>
<p style="background: #f6f5f0 none repeat scroll 0% 0%; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial; margin-left: 7pt"><span style="font-family: Courier New; font-size: 10pt"><span style="color: blue">        &lt;</span><span style="color: #a31515">sys</span><span style="color: blue">:</span><span style="color: #a31515">Double</span><span style="color: blue">&gt;</span><span style="color: #a31515">3.14159</span><span style="color: blue">&lt;/</span><span style="color: #a31515">sys</span><span style="color: blue">:</span><span style="color: #a31515">Double</span><span style="color: blue">&gt;<br />
</span></span></p>
<p style="background: #f6f5f0 none repeat scroll 0% 0%; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial; margin-left: 7pt"><span style="font-family: Courier New; font-size: 10pt"><span style="color: blue">        &lt;</span><span style="color: #a31515">sys</span><span style="color: blue">:</span><span style="color: #a31515">Double</span><span style="color: blue">&gt;</span><span style="color: #a31515">2.71828</span><span style="color: blue">&lt;/</span><span style="color: #a31515">sys</span><span style="color: blue">:</span><span style="color: #a31515">Double</span><span style="color: blue">&gt;<br />
</span></span></p>
<p style="background: #f6f5f0 none repeat scroll 0% 0%; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial; margin-left: 7pt"><span style="font-family: Courier New; font-size: 10pt"><span style="color: blue">&lt;/</span><span style="color: #a31515">ListBox</span><span style="color: blue">&gt;</span><span style="color: #a31515"><br />
</span></span></p>
<p style="background: #f6f5f0 none repeat scroll 0% 0%; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial; margin-left: 7pt">&nbsp;</p>
<p>Diese Vereinfachung ist wirklich hilfreich und funktioniert erst ab ServicePack1 aber dieser dürfte ja inzwischen fast überall freigegeben worden<br />
sein.</p>
<p>.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.moggl.eu/2009/10/07/databinding-und-stringformatierung-seit-sp1-%e2%80%93-das-ist-an-mir-vorbei-gegangen/feed/</wfw:commentRss>
		</item>
		<item>
		<title>WPF Multibinding – schon gewusst?</title>
		<link>http://blog.moggl.eu/2009/09/15/wpf-multibinding-%e2%80%93-schon-gewusst/</link>
		<comments>http://blog.moggl.eu/2009/09/15/wpf-multibinding-%e2%80%93-schon-gewusst/#comments</comments>
		<pubDate>Tue, 15 Sep 2009 13:26:24 +0000</pubDate>
		<dc:creator>wmn</dc:creator>
		
		<category><![CDATA[C#]]></category>

		<category><![CDATA[Visual Studio]]></category>

		<category><![CDATA[WPF]]></category>

		<guid isPermaLink="false">http://blog.moggl.eu/2009/09/15/wpf-multibinding-%e2%80%93-schon-gewusst/</guid>
		<description><![CDATA[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 &#8220;klassische Ansatz um mehrere Texte als Tooltip anzuzeigen:
&#60;Element&#62;
  &#60;Element.Tooltip&#62;
    &#60;StackPanel Orientation=&#8220;Horizontal&#8221;&#62;
      &#60;TextBlock Text=&#8220;{Binding Path=Feldwert1}&#8221;/&#62;
      &#60;TextBlock Text=&#8220;% von, &#8220;/&#62;
      &#60;TextBlock Text=&#8220;{Binding Path=Feldwert2}&#8221;/&#62;
  [...]]]></description>
			<content:encoded><![CDATA[<p>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:</p>
<p>Dies hier wäre wohl der &#8220;klassische Ansatz um mehrere Texte als Tooltip anzuzeigen:</p>
<p><span style="color: black">&lt;</span><span style="color: maroon">Element</span><span style="color: black">&gt;<br />
  &lt;</span><span style="color: maroon">Element</span><span style="color: black">.</span><span style="color: red">Tooltip</span><span style="color: black">&gt;<br />
    &lt;</span><span style="color: maroon">StackPanel </span><span style="color: red">Orientation</span><span style="color: black">=</span><span style="color: blue">&#8220;Horizontal&#8221;</span><span style="color: black">&gt;<br />
      &lt;</span><span style="color: maroon">TextBlock </span><span style="color: red">Text</span><span style="color: black">=</span><span style="color: blue">&#8220;{Binding Path=Feldwert1}&#8221;</span><span style="color: black">/&gt;<br />
      &lt;</span><span style="color: maroon">TextBlock </span><span style="color: red">Text</span><span style="color: black">=</span><span style="color: blue">&#8220;% von, &#8220;</span><span style="color: black">/&gt;<br />
      &lt;</span><span style="color: maroon">TextBlock </span><span style="color: red">Text</span><span style="color: black">=</span><span style="color: blue">&#8220;{Binding Path=Feldwert2}&#8221;</span><span style="color: black">/&gt;<br />
      &lt;</span><span style="color: maroon">TextBlock </span><span style="color: red">Text</span><span style="color: black">=</span><span style="color: blue">&#8220;% bis&#8221;</span><span style="color: black">/&gt;<br />
    &lt;/</span><span style="color: maroon">StackPanel</span><span style="color: black">&gt;<br />
  &lt;/</span><span style="color: maroon">Element</span><span style="color: black">.</span><span style="color: red">Tooltip</span><span style="color: black">&gt;<br />
&lt;/</span><span style="color: maroon">Element</span><span style="color: black">&gt;<br />
</span></p>
<p><span style="color: black">So gehts inzwischen aber auch:<br />
</span></p>
<p><span style="color: black">&lt;</span><span style="color: maroon">TextBox</span><span style="color: black">.</span><span style="color: red">Text</span><span style="color: black">&gt;<br />
    &lt;</span><span style="color: maroon">MultiBinding </span><span style="color: red">StringFormat</span><span style="color: black">=</span><span style="color: blue">&#8220;{}{1:#0}% von, {2:#0}% bis&#8221;</span><span style="color: black">&gt;<br />
      &lt;</span><span style="color: maroon">Binding </span><span style="color: red">Path</span><span style="color: black">=</span><span style="color: blue">&#8220;Feldwert1&#8243;</span><span style="color: black"> /&gt;<br />
      &lt;</span><span style="color: maroon">Binding </span><span style="color: red">Path</span><span style="color: black">=</span><span style="color: blue">&#8220;Feldwert2&#8243;</span><span style="color: black">/&gt;<br />
    &lt;/</span><span style="color: maroon">MultiBinding</span><span style="color: black">&gt;<br />
&lt;/</span><span style="color: maroon">TextBox</span><span style="color: black">.</span><span style="color: red">Text</span><span style="color: black">&gt;<br />
</span></p>
<p>Interessanterweise kann man diese Syntax auch in der Datenpflege anwenden. Das führt dazu, dass die Werte der zwei dahinterliegenden Felder in einer<br />
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<br />
wo das zweite anfängt. Auch das Thema Datenvalidierung wird dadurch sicher schwieriger. Insofern ist dieses neue Feature hier sicher nicht angebracht!</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.moggl.eu/2009/09/15/wpf-multibinding-%e2%80%93-schon-gewusst/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Daten in einem ListView dynamisch anzeigen</title>
		<link>http://blog.moggl.eu/2009/09/02/daten-in-einem-listview-dynamisch-anzeigen/</link>
		<comments>http://blog.moggl.eu/2009/09/02/daten-in-einem-listview-dynamisch-anzeigen/#comments</comments>
		<pubDate>Wed, 02 Sep 2009 14:29:15 +0000</pubDate>
		<dc:creator>wmn</dc:creator>
		
		<category><![CDATA[C#]]></category>

		<category><![CDATA[Visual Studio]]></category>

		<guid isPermaLink="false">http://blog.moggl.eu/2009/09/02/daten-in-einem-listview-dynamisch-anzeigen/</guid>
		<description><![CDATA[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:

Verwendet wird ein [...]]]></description>
			<content:encoded><![CDATA[<p>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.</p>
<p>Untenstehend habe ich einmal ein einfaches Beispiel aus einer WPF-Maske rauskopiert:</p>
<ol>
<li>Verwendet wird ein ListView-Steuerlement (erweiterte Listbox)</li>
<li>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</li>
<li>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:</li>
</ol>
<p><span style="font-size: 10pt"><em>&lt;ListView x:Name=&#8221;lstPlanEmployees&#8221; </em></span><span style="font-size: 10pt"><em>IsSynchronizedWithCurrentItem=&#8221;True&#8221; </em></span><span style="font-size: 10pt"><em>ToolTip=&#8221;durch auswählen Personendaten anzeigen&#8221;  </em></span><span style="font-size: 10pt"><em>SelectionChanged=&#8221;lstPlanEmployees_SelectionChanged&#8221; FontSize=&#8221;12&#8243;</em></span><span style="font-size: 10pt"><em>ItemContainerStyle=&#8221;{DynamicResource ItemContStyle}&#8221; </em></span><span style="font-size: 10pt"><em>&gt;<br />
</em></span><span style="font-size: 10pt"><em>&lt;ListView.View&gt;<br />
</em></span><span style="font-size: 10pt"><em>&lt;GridView&gt;<br />
</em></span><span style="font-size: 10pt"><em>&lt;GridViewColumn Width=&#8221;60&#8243; &gt;<br />
</em></span><span style="font-size: 10pt"><em>&lt;GridViewColumn.CellTemplate&gt;<br />
</em></span><span style="font-size: 10pt"><em>&lt;DataTemplate&gt;<br />
</em></span><span style="font-size: 10pt"><em>&lt;TextBox x:Name=&#8221;txtStatusCol&#8221; Text=&#8221;{Binding Path=Emplstatus}&#8221; /&gt;<br />
</em></span><span style="font-size: 10pt"><em>&lt;DataTemplate.Triggers&gt;<br />
</em></span><span style="font-size: 10pt"><em>&lt;DataTrigger Binding=&#8221;{Binding Path=Emplstatus}&#8221; Value=&#8221;aktiv&#8221;&gt;<br />
</em></span><span style="font-size: 10pt"><em>&lt;Setter Property=&#8221;Foreground&#8221; TargetName=&#8221;txtStatusCol&#8221; Value=&#8221;Green&#8221; /&gt;<br />
</em></span><span style="font-size: 10pt"><em>&lt;/DataTrigger&gt;<br />
</em></span><span style="font-size: 10pt"><em>&lt;DataTrigger Binding=&#8221;{Binding Path=Emplstatus}&#8221; Value=&#8221;inaktiv&#8221; &gt;<br />
</em></span><span style="font-size: 10pt"><em>&lt;Setter Property=&#8221;Foreground&#8221; TargetName=&#8221;txtStatusCol&#8221; Value=&#8221;Yellow&#8221; /&gt;<br />
</em></span><span style="font-size: 10pt"><em>&lt;/DataTrigger&gt;<br />
</em></span><span style="font-size: 10pt"><em>&lt;/DataTemplate.Triggers&gt;<br />
</em></span><span style="font-size: 10pt"><em>&lt;/DataTemplate&gt;<br />
</em></span><span style="font-size: 10pt"><em>&lt;/GridViewColumn.CellTemplate&gt;<br />
</em></span><span style="font-size: 10pt"><em>&lt;/GridViewColumn&gt;<br />
</em></span><span style="font-size: 10pt"><em>&lt;GridViewColumn DisplayMemberBinding=&#8221;{Binding Path=Jobtext}&#8221; </em></span><span style="font-size: 10pt"><em>Header=&#8221;Jobtext&#8221; </em></span><span style="font-size: 10pt"><em>Width=&#8221;150&#8243; /&gt;<br />
</em></span><span style="font-size: 10pt"><em>&lt;GridViewColumn DisplayMemberBinding=&#8221;{Binding Path=Name}&#8221; </em></span><span style="font-size: 10pt"><em>Width=&#8221;180&#8243; </em></span><span style="font-size: 10pt"><em>Header=&#8221;Name&#8221; /&gt;<br />
</em></span><span style="font-size: 10pt"><em>&lt;/GridView&gt;<br />
</em></span><span style="font-size: 10pt"><em>&lt;/ListView.View&gt;<br />
</em></span><span style="font-size: 10pt"><em>&lt;/ListView&gt;<br />
</em></span></p>
]]></content:encoded>
			<wfw:commentRss>http://blog.moggl.eu/2009/09/02/daten-in-einem-listview-dynamisch-anzeigen/feed/</wfw:commentRss>
		</item>
		<item>
		<title>WPF Datenvalidierung – Schritt für Schritt</title>
		<link>http://blog.moggl.eu/2009/09/01/wpf-datenvalidierung-%e2%80%93-schritt-fur-schritt/</link>
		<comments>http://blog.moggl.eu/2009/09/01/wpf-datenvalidierung-%e2%80%93-schritt-fur-schritt/#comments</comments>
		<pubDate>Tue, 01 Sep 2009 06:22:28 +0000</pubDate>
		<dc:creator>wmn</dc:creator>
		
		<category><![CDATA[C#]]></category>

		<category><![CDATA[Visual Studio]]></category>

		<guid isPermaLink="false">http://blog.moggl.eu/2009/09/01/wpf-datenvalidierung-%e2%80%93-schritt-fur-schritt/</guid>
		<description><![CDATA[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 [...]]]></description>
			<content:encoded><![CDATA[<p>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:</p>
<p>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.</p>
<p>Textbox-Control im XAML:</p>
<ul>
<li>Databinding ganz normal  an ein Object mit InotifyPropertyChanged-Events z.b. direkt Objekte aus dem DataContext</li>
<li>Nach der Prüfung wird bei einem Fehler die Fehlermessage als Tooltip angezeigt</li>
<li>Optional könnte man den Style im Fehlerfall noch anpassen – default ist ein roter Rand</li>
</ul>
<p><span style="font-family: Courier New"><em><span style="color: blue">&lt;</span><span style="color: #a31515">TextBox</span><span style="color: red"> Margin</span><span style="color: blue">=&#8221;5,5,5,5&#8243;</span><span style="color: red"> Grid.Column</span><span style="color: blue">=&#8221;1&#8243;</span><span style="color: red"> TextWrapping</span><span style="color: blue">=&#8221;Wrap&#8221;</span></em></span><span style="font-family: Courier New"><em> <span style="color: red">Text</span><span style="color: blue">=&#8221;{</span><span style="color: #a31515"> Binding</span><span style="color: red"> NoDEPC</span><span style="color: blue">,</span><span style="color: red">ValidatesOnExceptions</span><span style="color: blue">=True, </span><span style="color: red">NotifyOnValidationError</span><span style="color: blue">=true }&#8221; </span><span style="color: red">Validation.Error</span><span style="color: blue">=&#8221;TextBox_Error&#8221;&gt;<br />
&lt;/</span><span style="color: #a31515">TextBox</span><span style="color: blue">&gt;<br />
</span></em></span><span style="font-family: Tahoma; font-size: 12pt">Eventhandler für Fehler in der Datenvalidierung im Codebehind oder im Template….<br />
</span></p>
<p style="margin-left: 36pt"><span style="font-family: Courier New"><em><span style="color: blue">private</span><br />
<span style="color: blue">void</span> TextBox_Error(<span style="color: blue">object</span> sender,<br />
<span style="color: #2b91af">ValidationErrorEventArgs</span> e)<br />
{<br />
</em></span><span style="font-family: Courier New"><em><span style="color: blue">if</span> (e.Action == <span style="color: #2b91af">ValidationErrorEventAction</span>.Added)<br />
            {<br />
            ((<span style="color: #2b91af">Control</span>)sender).ToolTip = </em></span><span style="font-family: Courier New"><em>e.Error.Exception.InnerException.Message.ToString();<br />
</em></span><span style="font-family: Courier New"><em>            }<br />
  <span style="color: blue">else<br />
</span>      {<br />
           ((<span style="color: #2b91af">Control</span>)sender).ToolTip = <span style="color: #a31515">&#8220;&#8221;</span>;<br />
     }<br />
</em></span><span style="font-family: Courier New"><em>}<br />
</em></span></p>
<p><span style="font-family: Tahoma; font-size: 12pt">Das gebundene Object z.B. aus dem Datacontext muss erweitert werden:<br />
Hier: gebundenes Feld NoDEPC<br />
</span></p>
<p><span style="font-family: Courier New"><em><span style="color: blue">using</span> System;<br />
<span style="color: blue">using</span> System.Collections.Generic;<br />
<span style="color: blue">using</span> System.Linq;<br />
<span style="color: blue">using</span> System.Text;<br />
<span style="color: blue">using</span> Business;<br />
<span style="color: blue">using</span> System.Collections;<br />
</em></span></p>
<p><span style="font-family: Courier New"><em><span style="color: blue">namespace</span> Business<br />
    {<br />
// die EntityKlasse, die vom LINQ-Designer generiert<br />
// wurde, wird hier noch erweitert<br />
</em></span></p>
<p><span style="font-family: Courier New"><em><span style="color: blue">public </span><span style="color: blue">partial </span><span style="color: blue">class </span><span style="color: #2b91af">Profit_Center</span></em></span><span style="font-family: Courier New"><em> <br />
   {<br />
</em></span><span style="font-family: Courier New"><em>   <span style="color: blue">public </span><span style="color: blue">void</span> SetDefaultValues()<br />
</em></span><span style="font-family: Courier New"><em>             {<br />
</em></span><span style="font-family: Courier New"><em>             ID_ProfitCenter = <span style="color: #2b91af">Guid</span>.NewGuid();<br />
</em></span><span style="font-family: Courier New"><em>             NoDesoursys = <span style="color: #a31515">&#8220;99&#8243;</span>;<br />
</em></span><span style="font-family: Courier New"><em>             NoDeco_Area = <span style="color: #a31515">&#8220;XXXXX&#8221;</span>;<br />
</em></span><span style="font-family: Courier New"><em>             PNSourSys = <span style="color: #a31515">&#8220;33&#8243;</span>;<br />
</em></span><span style="font-family: Courier New"><em>            PNCo_Area = <span style="color: #a31515">&#8220;05&#8243;</span>;<br />
</em></span><span style="font-family: Courier New"><em>             IsActive = <span style="color: blue">true</span>;<br />
</em></span><span style="font-family: Courier New"><em>             IsTemplate = <span style="color: blue">false</span>;<br />
</em></span><em><span style="font-family: Courier New">             }<br />
</span><span style="color: #9bbb59">// überschriebene erweiterte Methode aus der Klasse</span></em><em><span style="color: #9bbb59"><br />
</span><span style="font-family: Courier New"><span style="color: blue">partial </span><span style="color: blue">void</span> OnNoDEPCChanged()<br />
   {<br />
<span style="color: #9bbb59">   // sobald das property geändert wird<br />
   //z.B. durchs Verlassen der Textbox<br />
   // läuft die Regelprüfung<br />
</span></span></em><span style="font-family: Courier New"><em>   CheckNodePC(<span style="color: blue">this</span>.NoDEPC);<br />
</em></span><span style="font-family: Courier New"><em>   }<br />
</em></span></p>
<p style="margin-left: 35pt"><em>//eigentliche Regelprüfung in der klasse<br />
<span style="font-family: Courier New"><span style="color: blue">public </span><span style="color: blue">string</span> CheckNodePC(<span style="color: blue">string</span> Nodename)<br />
   {<br />
   <span style="color: blue">string</span> msg = <span style="color: #a31515">&#8220;&#8221;</span>;</p>
<p></span></em></p>
<p><span style="font-family: Courier New"><em>        <span style="color: blue">if</span>(Nodename== <span style="color: blue">null</span> || Nodename== <span style="color: #a31515">&#8220;&#8221;</span>)<br />
                 msg = <span style="color: #a31515">&#8220;Profitcenternamen dürfen nicht leer sein &#8220;</span>;</em></span><span style="font-family: Courier New"><em>        <span style="color: blue">if</span>(Nodename.Contains(<span style="color: #a31515">&#8221; &#8220;</span>)== <span style="color: blue">true</span>)<br />
                 msg += <span style="color: #a31515">&#8220;Profitcenternamen dürfen keine Leerstellen enthalten&#8221;</span>;<br />
<span style="font-family: Courier New"><em><br />
       <span style="color: blue">if</span> (msg !=<span style="color: #a31515">&#8220;&#8221;</span>)<br />
           {<br />
       <span style="color: #9bbb59">// exception auslösen damit die message auch<br />
       //an die GUI kommt<br />
</span>            <span style="color: blue">throw </span><span style="color: blue">new </span><span style="color: #2b91af">ArgumentOutOfRangeException</span>(msg);<br />
</em></span><span style="font-family: Courier New"><em>             <span style="color: blue">return</span> msg;<br />
           }<br />
         }<br />
    }<br />
</em></span></p>
<p></em></span><em><br />
</em> </p>
]]></content:encoded>
			<wfw:commentRss>http://blog.moggl.eu/2009/09/01/wpf-datenvalidierung-%e2%80%93-schritt-fur-schritt/feed/</wfw:commentRss>
		</item>
	</channel>
</rss>
