<?xml version="1.0" encoding="UTF-8" ?>
<?xml-stylesheet type="text/xsl" href="http://weblogs.asp.net/utility/FeedStylesheets/atom.xsl" media="screen"?><feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en"><title type="html">Hannes Preishuber</title><subtitle type="html">ON ERROR RESUME NEXT!</subtitle><id>http://weblogs.asp.net/hpreishuber/atom.aspx</id><link rel="alternate" type="text/html" href="http://weblogs.asp.net/hpreishuber/default.aspx" /><link rel="self" type="application/atom+xml" href="http://weblogs.asp.net/hpreishuber/atom.aspx" /><generator uri="http://communityserver.org" version="3.0.20510.895">Community Server</generator><updated>2008-11-15T11:22:07Z</updated><entry><title>free pop3 for Windows 2012 Server</title><link rel="alternate" type="text/html" href="http://weblogs.asp.net/hpreishuber/archive/2013/05/06/free-pop3-for-windows-2012-server.aspx" /><id>http://weblogs.asp.net/hpreishuber/archive/2013/05/06/free-pop3-for-windows-2012-server.aspx</id><published>2013-05-06T05:34:00Z</published><updated>2013-05-06T05:34:00Z</updated><content type="html">&lt;span lang="EN-US" style="mso-ansi-language: EN-US;"&gt;&lt;font face="Calibri"&gt;&lt;font size="3"&gt;&lt;span lang="EN-US" style="mso-ansi-language: EN-US; mso-bidi-font-family: Arial; mso-ascii-font-family: Calibri; mso-hansi-font-family: Calibri;"&gt;Our team develops tools for Windows Server. Fifteen years ago we started
with a pop3 queuing (popConnect) tool. We offer a free extender for the IIS
SMTP Service to support pop3.&lt;/span&gt;&lt;/font&gt;&lt;/font&gt;&lt;/span&gt;&lt;p mce_keep="true"&gt;&lt;span lang="EN-US" style="font-family: Symbol; mso-ansi-language: EN-US; mso-fareast-font-family: Symbol; mso-bidi-font-family: Symbol;"&gt;&lt;span style="mso-list: Ignore;"&gt;&lt;font size="3"&gt;·&lt;/font&gt;&lt;span style='font: 7pt/normal "Times New Roman"; font-size-adjust: none; font-stretch: normal;'&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;!--[endif]--&gt;&lt;span lang="EN-US" style="mso-ansi-language: EN-US;"&gt;&lt;font size="3"&gt;&lt;font face="Calibri"&gt;You
want to provide emails from any source (e.g. IIS, SharePoint, …) for POP3
retrieval by any mail client (e.g. Outlook, Thunderbird, …).&lt;o:p&gt;&lt;/o:p&gt;&lt;/font&gt;&lt;/font&gt;&lt;/span&gt;&lt;/p&gt;&lt;p mce_keep="true"&gt;&lt;font face="Times New Roman" size="3"&gt;

&lt;/font&gt;&lt;span lang="EN-US" style="font-family: Symbol; mso-ansi-language: EN-US; mso-fareast-font-family: Symbol; mso-bidi-font-family: Symbol;"&gt;&lt;span style="mso-list: Ignore;"&gt;&lt;font size="3"&gt;·&lt;/font&gt;&lt;span style='font: 7pt/normal "Times New Roman"; font-size-adjust: none; font-stretch: normal;'&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;!--[endif]--&gt;&lt;span lang="EN-US" style="mso-ansi-language: EN-US;"&gt;&lt;font size="3"&gt;&lt;font face="Calibri"&gt;You
used the Microsoft POP3 Service in Windows Server 2003 and miss the feature
after migrating to Windows Server 2012 or Windows Server 2008.&lt;o:p&gt;&lt;/o:p&gt;&lt;/font&gt;&lt;/font&gt;&lt;/span&gt;&lt;/p&gt;&lt;p mce_keep="true"&gt;&lt;font face="Times New Roman" size="3"&gt;

&lt;/font&gt;&lt;span lang="EN-US" style="font-family: Symbol; mso-ansi-language: EN-US; mso-fareast-font-family: Symbol; mso-bidi-font-family: Symbol;"&gt;&lt;span style="mso-list: Ignore;"&gt;&lt;font size="3"&gt;·&lt;/font&gt;&lt;span style='font: 7pt/normal "Times New Roman"; font-size-adjust: none; font-stretch: normal;'&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;!--[endif]--&gt;&lt;span lang="EN-US" style="mso-ansi-language: EN-US;"&gt;&lt;font size="3"&gt;&lt;font face="Calibri"&gt;You
are looking for a free POP3 Server.&lt;o:p&gt;&lt;/o:p&gt;&lt;/font&gt;&lt;/font&gt;&lt;/span&gt;&lt;/p&gt;&lt;p mce_keep="true"&gt;&lt;font face="Times New Roman" size="3"&gt;

&lt;/font&gt;&lt;span lang="EN-US" style="font-family: Symbol; mso-ansi-language: EN-US; mso-fareast-font-family: Symbol; mso-bidi-font-family: Symbol;"&gt;&lt;span style="mso-list: Ignore;"&gt;&lt;font size="3"&gt;·&lt;/font&gt;&lt;span style='font: 7pt/normal "Times New Roman"; font-size-adjust: none; font-stretch: normal;'&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;!--[endif]--&gt;&lt;span lang="EN-US" style="mso-ansi-language: EN-US;"&gt;&lt;font size="3"&gt;&lt;font face="Calibri"&gt;You
don’t need or want all the capabilities of Microsoft Exchange and you want a
small, performant solution to provide your emails.&lt;o:p&gt;&lt;/o:p&gt;&lt;/font&gt;&lt;/font&gt;&lt;/span&gt;&lt;/p&gt;&lt;p mce_keep="true"&gt;&lt;font face="Times New Roman" size="3"&gt;

&lt;/font&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="margin: 0cm 0cm 0pt;"&gt;&lt;span lang="EN-US" style="mso-ansi-language: EN-US;"&gt;&lt;font size="3"&gt;&lt;font face="Calibri"&gt;Visendo
SMTP Extender is a full POP3 server that runs as a Windows service, originally
developed for Windows Server 2008, as a substitute for the missing POP3 service
there. &lt;/font&gt;&lt;/font&gt;&lt;/span&gt;&lt;span lang="EN-US" style="mso-ansi-language: EN-US;"&gt;&lt;font size="3"&gt;&lt;font face="Calibri"&gt;It monitors
an e-mail drop folder, such as IIS "mailroot\drop", and provides the
e-mails to clients for collection via the POP3 protocol.&lt;o:p&gt;&lt;/o:p&gt;&lt;/font&gt;&lt;/font&gt;&lt;/span&gt;&lt;/p&gt;&lt;p mce_keep="true"&gt;&lt;font face="Times New Roman" size="3"&gt;

&lt;/font&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="margin: 0cm 0cm 0pt;"&gt;&lt;span lang="EN-US" style="mso-ansi-language: EN-US;"&gt;&lt;font size="3"&gt;&lt;font face="Calibri"&gt;About 5
years ago, Visendo Software, a department of ppedv AG, released the first
version of Visendo SMTP Extender.&lt;o:p&gt;&lt;/o:p&gt;&lt;/font&gt;&lt;/font&gt;&lt;/span&gt;&lt;/p&gt;&lt;p mce_keep="true"&gt;&lt;font face="Times New Roman" size="3"&gt;

&lt;/font&gt;&lt;span lang="EN-US" style="mso-ansi-language: EN-US;"&gt;&lt;font size="3"&gt;&lt;font face="Calibri"&gt;Since then,
we continually developed and improved the software:&lt;o:p&gt;&lt;/o:p&gt;&lt;/font&gt;&lt;/font&gt;&lt;/span&gt;&lt;/p&gt;&lt;p mce_keep="true"&gt;&lt;font face="Times New Roman" size="3"&gt;

&lt;/font&gt;&lt;span lang="EN-US" style="font-family: Symbol; mso-ansi-language: EN-US; mso-fareast-font-family: Symbol; mso-bidi-font-family: Symbol;"&gt;&lt;span style="mso-list: Ignore;"&gt;&lt;font size="3"&gt;·&lt;/font&gt;&lt;span style='font: 7pt/normal "Times New Roman"; font-size-adjust: none; font-stretch: normal;'&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;!--[endif]--&gt;&lt;span lang="EN-US" style="mso-ansi-language: EN-US;"&gt;&lt;font size="3"&gt;&lt;font face="Calibri"&gt;better
RFC compliance&lt;o:p&gt;&lt;/o:p&gt;&lt;/font&gt;&lt;/font&gt;&lt;/span&gt;&lt;/p&gt;&lt;p mce_keep="true"&gt;&lt;font face="Times New Roman" size="3"&gt;

&lt;/font&gt;&lt;span lang="EN-US" style="font-family: Symbol; mso-ansi-language: EN-US; mso-fareast-font-family: Symbol; mso-bidi-font-family: Symbol;"&gt;&lt;span style="mso-list: Ignore;"&gt;&lt;font size="3"&gt;·&lt;/font&gt;&lt;span style='font: 7pt/normal "Times New Roman"; font-size-adjust: none; font-stretch: normal;'&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;!--[endif]--&gt;&lt;span lang="EN-US" style="mso-ansi-language: EN-US;"&gt;&lt;font size="3"&gt;&lt;font face="Calibri"&gt;higher
stability&lt;o:p&gt;&lt;/o:p&gt;&lt;/font&gt;&lt;/font&gt;&lt;/span&gt;&lt;/p&gt;&lt;p mce_keep="true"&gt;&lt;font face="Times New Roman" size="3"&gt;

&lt;/font&gt;&lt;span lang="EN-US" style="font-family: Symbol; mso-ansi-language: EN-US; mso-fareast-font-family: Symbol; mso-bidi-font-family: Symbol;"&gt;&lt;span style="mso-list: Ignore;"&gt;&lt;font size="3"&gt;·&lt;/font&gt;&lt;span style='font: 7pt/normal "Times New Roman"; font-size-adjust: none; font-stretch: normal;'&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;!--[endif]--&gt;&lt;span lang="EN-US" style="mso-ansi-language: EN-US;"&gt;&lt;font size="3"&gt;&lt;font face="Calibri"&gt;easier
to install, configure and use&lt;o:p&gt;&lt;/o:p&gt;&lt;/font&gt;&lt;/font&gt;&lt;/span&gt;&lt;/p&gt;&lt;p mce_keep="true"&gt;&lt;font face="Times New Roman" size="3"&gt;

&lt;/font&gt;&lt;span lang="EN-US" style="font-family: Symbol; mso-ansi-language: EN-US; mso-fareast-font-family: Symbol; mso-bidi-font-family: Symbol;"&gt;&lt;span style="mso-list: Ignore;"&gt;&lt;font size="3"&gt;·&lt;/font&gt;&lt;span style='font: 7pt/normal "Times New Roman"; font-size-adjust: none; font-stretch: normal;'&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;!--[endif]--&gt;&lt;span lang="EN-US" style="mso-ansi-language: EN-US;"&gt;&lt;font size="3"&gt;&lt;font face="Calibri"&gt;mailbox
overview with mail size and count&lt;o:p&gt;&lt;/o:p&gt;&lt;/font&gt;&lt;/font&gt;&lt;/span&gt;&lt;/p&gt;&lt;p mce_keep="true"&gt;&lt;font face="Times New Roman" size="3"&gt;

&lt;/font&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="margin: 0cm 0cm 0pt;"&gt;&lt;span lang="EN-US" style="mso-ansi-language: EN-US;"&gt;&lt;font face="Calibri" size="3"&gt;for more
detailed information check the complete changelog and version history: &lt;/font&gt;&lt;a href="http://support.visendo.com/default.aspx?g=posts&amp;amp;t=686" mce_href="http://support.visendo.com/default.aspx?g=posts&amp;amp;t=686"&gt;&lt;font color="#0000ff" face="Calibri" size="3"&gt;http://support.visendo.com/default.aspx?g=posts&amp;amp;t=686&lt;/font&gt;&lt;/a&gt;&lt;font size="3"&gt;&lt;font face="Calibri"&gt;
&lt;o:p&gt;&lt;/o:p&gt;&lt;/font&gt;&lt;/font&gt;&lt;/span&gt;&lt;/p&gt;&lt;p mce_keep="true"&gt;&lt;font face="Times New Roman" size="3"&gt;

&lt;/font&gt;&lt;span lang="EN-US" style="mso-ansi-language: EN-US;"&gt;&lt;font face="Calibri" size="3"&gt;product
website: &lt;/font&gt;&lt;/span&gt;&lt;a href="http://www.visendo.com/smtpextender.aspx" mce_href="http://www.visendo.com/smtpextender.aspx"&gt;&lt;span lang="EN-US" style="mso-ansi-language: EN-US;"&gt;&lt;font color="#0000ff" face="Calibri" size="3"&gt;http://www.visendo.com/smtpextender.aspx&lt;/font&gt;&lt;/span&gt;&lt;/a&gt;&lt;span lang="EN-US" style="mso-ansi-language: EN-US;"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;&lt;p mce_keep="true"&gt;&lt;font face="Times New Roman" size="3"&gt;

&lt;/font&gt;&lt;/p&gt;&lt;p mce_keep="true"&gt;&lt;font face="Times New Roman" size="3"&gt;

&lt;/font&gt;&lt;span lang="EN-US" style="mso-ansi-language: EN-US;"&gt;&lt;font size="3"&gt;&lt;font face="Calibri"&gt;There are
several guides, also from third parties, to help you installing and configuring
your email environment.&lt;o:p&gt;&lt;/o:p&gt;&lt;/font&gt;&lt;/font&gt;&lt;/span&gt;&lt;/p&gt;&lt;p mce_keep="true"&gt;&lt;font face="Times New Roman" size="3"&gt;

&lt;/font&gt;&lt;span lang="EN-US" style="mso-ansi-language: EN-US;"&gt;&lt;font size="3"&gt;&lt;font face="Calibri"&gt;How to
configure IIS SMTP Server in combination with Visendo SMTP Extender:&lt;o:p&gt;&lt;/o:p&gt;&lt;/font&gt;&lt;/font&gt;&lt;/span&gt;&lt;/p&gt;&lt;p mce_keep="true"&gt;&lt;font face="Times New Roman" size="3"&gt;

&lt;/font&gt;&lt;a href="http://www.visendo.com/download/visendosmtpextender/docs/VisendoSmtpExtender_manual_en.pdf" mce_href="http://www.visendo.com/download/visendosmtpextender/docs/VisendoSmtpExtender_manual_en.pdf"&gt;&lt;font color="#0000ff" face="Calibri" size="3"&gt;http://www.visendo.com/download/visendosmtpextender/docs/VisendoSmtpExtender_manual_en.pdf&lt;/font&gt;&lt;/a&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/p&gt;&lt;p mce_keep="true"&gt;&lt;font face="Times New Roman" size="3"&gt;

&lt;/font&gt;&lt;span lang="EN-US" style="mso-ansi-language: EN-US;"&gt;&lt;font size="3"&gt;&lt;font face="Calibri"&gt;How to
configure Sharepoint in combination with Visendo SMTP Extender:&lt;o:p&gt;&lt;/o:p&gt;&lt;/font&gt;&lt;/font&gt;&lt;/span&gt;&lt;/p&gt;&lt;p mce_keep="true"&gt;&lt;font face="Times New Roman" size="3"&gt;

&lt;/font&gt;&lt;a href="http://en.hugon.ws/articles/sharepoint-2010/installing-and-configuring-smtp-and-pop3-services-for-sharepoint-2010/" mce_href="http://en.hugon.ws/articles/sharepoint-2010/installing-and-configuring-smtp-and-pop3-services-for-sharepoint-2010/"&gt;&lt;span lang="EN-US" style="mso-ansi-language: EN-US;"&gt;&lt;font color="#0000ff" face="Calibri" size="3"&gt;http://en.hugon.ws/articles/sharepoint-2010/installing-and-configuring-smtp-and-pop3-services-for-sharepoint-2010/&lt;/font&gt;&lt;/span&gt;&lt;/a&gt;&lt;span lang="EN-US" style="mso-ansi-language: EN-US;"&gt;&lt;font size="3"&gt;&lt;font face="Calibri"&gt; *&lt;o:p&gt;&lt;/o:p&gt;&lt;/font&gt;&lt;/font&gt;&lt;/span&gt;&lt;/p&gt;&lt;p mce_keep="true"&gt;&lt;font face="Times New Roman" size="3"&gt;

&lt;/font&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="margin: 0cm 0cm 0pt;"&gt;&lt;a href="http://mosshowto.blogspot.de/2010/05/installing-smtp-pop3-sharepoint-2010.html" mce_href="http://mosshowto.blogspot.de/2010/05/installing-smtp-pop3-sharepoint-2010.html"&gt;&lt;span lang="EN-US" style="mso-ansi-language: EN-US;"&gt;&lt;font color="#0000ff" face="Calibri" size="3"&gt;http://mosshowto.blogspot.de/2010/05/installing-smtp-pop3-sharepoint-2010.html&lt;/font&gt;&lt;/span&gt;&lt;/a&gt;&lt;font size="3"&gt;&lt;font face="Calibri"&gt;
&lt;span lang="EN-US" style="mso-ansi-language: EN-US;"&gt;*&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt;&lt;p mce_keep="true"&gt;&lt;font face="Times New Roman" size="3"&gt;

&lt;/font&gt;&lt;span lang="EN-US" style="mso-ansi-language: EN-US;"&gt;&lt;font size="3"&gt;&lt;font face="Calibri"&gt;*this was
with an older version of SMTP Extender. You can use the admin interface instead
of editing the config file manually now.&lt;o:p&gt;&lt;/o:p&gt;&lt;/font&gt;&lt;/font&gt;&lt;/span&gt;&lt;/p&gt;&lt;p mce_keep="true"&gt;&lt;font face="Times New Roman" size="3"&gt;

&lt;/font&gt;&lt;span lang="EN-US" style="mso-ansi-language: EN-US;"&gt;&lt;font size="3"&gt;&lt;font face="Calibri"&gt;You can
download Visendo SMTP Extender here:&lt;o:p&gt;&lt;/o:p&gt;&lt;/font&gt;&lt;/font&gt;&lt;/span&gt;&lt;/p&gt;&lt;p mce_keep="true"&gt;&lt;font face="Times New Roman" size="3"&gt;

&lt;/font&gt;&lt;span lang="EN-US" style="mso-ansi-language: EN-US;"&gt;&lt;font face="Calibri" size="3"&gt;Community
Edition (free): &lt;/font&gt;&lt;a href="http://www.visendo.com/VisendoDownloads.aspx?id=42" mce_href="http://www.visendo.com/VisendoDownloads.aspx?id=42"&gt;&lt;font color="#0000ff" face="Calibri" size="3"&gt;http://www.visendo.com/VisendoDownloads.aspx?id=42&lt;/font&gt;&lt;/a&gt;&lt;font size="3"&gt;&lt;font face="Calibri"&gt;
&lt;o:p&gt;&lt;/o:p&gt;&lt;/font&gt;&lt;/font&gt;&lt;/span&gt;&lt;/p&gt;&lt;p mce_keep="true"&gt;&lt;font face="Times New Roman" size="3"&gt;

&lt;/font&gt;&lt;span lang="EN-US" style="mso-ansi-language: EN-US;"&gt;&lt;font face="Calibri" size="3"&gt;Plus
Edition (99 € / 30 day trial): &lt;/font&gt;&lt;a href="http://www.visendo.com/VisendoDownloads.aspx?id=52" mce_href="http://www.visendo.com/VisendoDownloads.aspx?id=52"&gt;&lt;font color="#0000ff" face="Calibri" size="3"&gt;http://www.visendo.com/VisendoDownloads.aspx?id=52&lt;/font&gt;&lt;/a&gt;&lt;font size="3"&gt;&lt;font face="Calibri"&gt;
&lt;o:p&gt;&lt;/o:p&gt;&lt;/font&gt;&lt;/font&gt;&lt;/span&gt;&lt;/p&gt;&lt;p mce_keep="true"&gt;&lt;font face="Times New Roman" size="3"&gt;

&lt;/font&gt;&lt;span lang="EN-US" style="mso-ansi-language: EN-US;"&gt;&lt;font size="3"&gt;&lt;font face="Calibri"&gt;Differences:
the Plus Edition supports unlimited client connections, parsing of multiple
custom destination header fields and other advanced features.&lt;o:p&gt;&lt;/o:p&gt;&lt;/font&gt;&lt;/font&gt;&lt;/span&gt;&lt;/p&gt;&lt;p mce_keep="true"&gt;&lt;font face="Times New Roman" size="3"&gt;

&lt;/font&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="margin: 0cm 0cm 0pt;"&gt;&lt;span lang="EN-US" style="mso-ansi-language: EN-US;"&gt;&lt;font size="3"&gt;&lt;font face="Calibri"&gt;Please let
us know if you like SMTP Extender.&lt;o:p&gt;&lt;/o:p&gt;&lt;/font&gt;&lt;/font&gt;&lt;/span&gt;&lt;/p&gt;&lt;p mce_keep="true"&gt;&lt;font face="Times New Roman" size="3"&gt;

&lt;/font&gt;&lt;span lang="EN-US" style="mso-ansi-language: EN-US;"&gt;&lt;font size="3"&gt;&lt;font face="Calibri"&gt;Get in touch by
Email: support[at]ppedv.de&lt;/font&gt;&lt;/font&gt;&lt;/span&gt;&lt;/p&gt;&lt;p mce_keep="true"&gt;&lt;span lang="EN-US" style="mso-ansi-language: EN-US;"&gt;&lt;font size="3"&gt;&lt;font face="Calibri"&gt;Comments are disabled, cause of blog spamming.&lt;/font&gt;&lt;/font&gt;&lt;/span&gt;&lt;/p&gt;&lt;p mce_keep="true"&gt;&lt;font face="Times New Roman" size="3"&gt;

&lt;/font&gt;&lt;/p&gt;&lt;img src="http://weblogs.asp.net/aggbug.aspx?PostID=10252378" width="1" height="1"&gt;</content><author><name>preishuber</name><uri>http://weblogs.asp.net/members/preishuber.aspx</uri></author><category term="SMTP" scheme="http://weblogs.asp.net/hpreishuber/archive/tags/SMTP/default.aspx" /><category term="POP3" scheme="http://weblogs.asp.net/hpreishuber/archive/tags/POP3/default.aspx" /><category term="IIS" scheme="http://weblogs.asp.net/hpreishuber/archive/tags/IIS/default.aspx" /></entry><entry><title>Update Visendo SMTP Extender Update</title><link rel="alternate" type="text/html" href="http://weblogs.asp.net/hpreishuber/archive/2010/10/02/update-visendo-smtp-extender-update.aspx" /><id>http://weblogs.asp.net/hpreishuber/archive/2010/10/02/update-visendo-smtp-extender-update.aspx</id><published>2010-10-02T08:39:00Z</published><updated>2010-10-02T08:39:00Z</updated><content type="html">&lt;P&gt;Our team from &lt;A href="http://www.ppedv.de" mce_href="http://www.ppedv.de"&gt;ppedv&lt;/A&gt; (credits to Cosmin) have released the new edtion based on your feedback.&lt;/P&gt;&lt;P&gt;Visendo&amp;nbsp;STMP Extender, extends the SMTP Server from Windows 2008 (and R2)&amp;nbsp;to the POP3 protocol. So in fact you get the possibilty to pull mails via&amp;nbsp;POP3 from&amp;nbsp;your&amp;nbsp;IIS 7 based webservers. &amp;nbsp;&lt;/P&gt;&lt;P&gt;Download and Info&lt;/P&gt;&lt;P&gt;&lt;A href="http://blogs.visendo.com/post/2010/10/01/Visendo-SMTP-Extender-version-RTM.aspx"&gt;http://blogs.visendo.com/post/2010/10/01/Visendo-SMTP-Extender-version-RTM.aspx&lt;/A&gt;&lt;/P&gt;&lt;P&gt;Its free, costs nothing.&lt;/P&gt;&lt;P&gt;The Visendo team develops: Fax Server (also for ISDN), Anti Spam and pop3 pulling (popconnect). The SMTP Extender is a spin of from that team and code base. Enjoy it.&lt;/P&gt;&lt;img src="http://weblogs.asp.net/aggbug.aspx?PostID=7622718" width="1" height="1"&gt;</content><author><name>preishuber</name><uri>http://weblogs.asp.net/members/preishuber.aspx</uri></author><category term="IIS7" scheme="http://weblogs.asp.net/hpreishuber/archive/tags/IIS7/default.aspx" /><category term="SMTP" scheme="http://weblogs.asp.net/hpreishuber/archive/tags/SMTP/default.aspx" /><category term="POP3" scheme="http://weblogs.asp.net/hpreishuber/archive/tags/POP3/default.aspx" /></entry><entry><title>302: this blog will be closed</title><link rel="alternate" type="text/html" href="http://weblogs.asp.net/hpreishuber/archive/2010/05/26/302-this-blog-will-be-closed.aspx" /><id>http://weblogs.asp.net/hpreishuber/archive/2010/05/26/302-this-blog-will-be-closed.aspx</id><published>2010-05-26T17:39:00Z</published><updated>2010-05-26T17:39:00Z</updated><content type="html">&lt;P mce_keep="true"&gt;After nearly 7 years I will discontinue blogging on this site. My resources are limited.&amp;nbsp;You can reach my &lt;A href="http://blogs.ppedv.de/hannesp" mce_href="http://blogs.ppedv.de/hannesp"&gt;German blog&lt;/A&gt; which is used to support my customers. Looking back to a long an interesting journey&lt;/P&gt;
&lt;P mce_keep="true"&gt;&lt;STRONG&gt;ASP.NET by ScottGu&lt;/STRONG&gt;&lt;/P&gt;
&lt;P mce_keep="true"&gt;That was the reason to attend this site and support Microsoft as much as I can. For that I was honored as ASP.NET MVP- thanks again. Meet Scoot several times. Great guy!&lt;/P&gt;
&lt;P mce_keep="true"&gt;&lt;STRONG&gt;Forums&lt;/STRONG&gt;&lt;/P&gt;
&lt;P mce_keep="true"&gt;I have left NNTP forums a few years ago and now Microsoft closed it- It was my idea ;-)&lt;/P&gt;
&lt;P mce_keep="true"&gt;&lt;STRONG&gt;AJAX&lt;/STRONG&gt;&lt;/P&gt;
&lt;P mce_keep="true"&gt;Was the wrong way- JQuery won the game&lt;/P&gt;
&lt;P mce_keep="true"&gt;&lt;STRONG&gt;IIS7&lt;/STRONG&gt;&lt;/P&gt;
&lt;P mce_keep="true"&gt;That is really a great plattform and the IIS team rules. I am sad that is so silent around that topic.&lt;/P&gt;
&lt;P mce_keep="true"&gt;&lt;STRONG&gt;ASP.NET after 2.0&lt;/STRONG&gt;&lt;/P&gt;
&lt;P mce_keep="true"&gt;Is no longer my world. I love ASP.NET and ASP.NET Server controls. I hate the discussion about how to follow the holy rules of MVC. Microsoft have dropped the goal to bring ASP.NET to #1 and accepted PHP is it.&lt;/P&gt;
&lt;P mce_keep="true"&gt;&lt;STRONG&gt;Facebook &amp;amp; Twittering&lt;/STRONG&gt;&lt;/P&gt;
&lt;P mce_keep="true"&gt;Microblogging takes over a part of the blogging business. Shorter faster cheaper- or as SteveB mentioned - do more with less.&lt;/P&gt;
&lt;P mce_keep="true"&gt;&lt;STRONG&gt;Google&lt;/STRONG&gt;&lt;/P&gt;
&lt;P mce_keep="true"&gt;Google is taking over the web. I am using Bing every time as I can but Google have more options. Sorry Microsoft you will loose that game.&lt;/P&gt;
&lt;P mce_keep="true"&gt;&lt;STRONG&gt;Apple&lt;/STRONG&gt;&lt;/P&gt;
&lt;P mce_keep="true"&gt;That is not the biggest problem of Microsoft. the Ixxx takes over a small part but big money&amp;nbsp;of the market, but the customers are not strongly linked. New wave new hype- Game over Apple.&lt;/P&gt;
&lt;P mce_keep="true"&gt;&lt;STRONG&gt;Silverlight&lt;/STRONG&gt;&lt;/P&gt;
&lt;P mce_keep="true"&gt;My new home. I can reuse a lot of my skills and love the possibilitys. Silverligth will passing WPF-and strike Flash&lt;/P&gt;
&lt;P mce_keep="true"&gt;&lt;STRONG&gt;Windows phone 7&lt;/STRONG&gt;&lt;/P&gt;
&lt;P mce_keep="true"&gt;Also my skills fit. I just will use it for fun. I am not really satisfied about what I have heard from MIX. Guys from Redmond, I am sad to say you have been the best Smartphone OS and lost everything.&lt;/P&gt;
&lt;P mce_keep="true"&gt;&lt;STRONG&gt;The ADO&amp;nbsp;vNext Story&lt;/STRONG&gt;&lt;/P&gt;
&lt;P mce_keep="true"&gt;That will be the next mystic point. WCF, REST, JSON, ATOM and now OData. Nothing about SQL commands. LINQ, ORM is also not the final solution for multilayered disconnected async scenarios. Personally I prefere the OData idea and dislike the Swiss Army Knife (German Eierlegende Wollmilchsau) WCF.&lt;/P&gt;
&lt;P mce_keep="true"&gt;I am still in INETA Speakers board and I am glad to come to your user group. In all other cases you can hire me over ppedv AG.&lt;/P&gt;
&lt;P mce_keep="true"&gt;Good by and have good live.&lt;/P&gt;&lt;img src="http://weblogs.asp.net/aggbug.aspx?PostID=7506853" width="1" height="1"&gt;</content><author><name>preishuber</name><uri>http://weblogs.asp.net/members/preishuber.aspx</uri></author><category term="ASP.NET" scheme="http://weblogs.asp.net/hpreishuber/archive/tags/ASP.NET/default.aspx" /><category term="Silverlight" scheme="http://weblogs.asp.net/hpreishuber/archive/tags/Silverlight/default.aspx" /></entry><entry><title>Adhoc testing of .NET RIA Services</title><link rel="alternate" type="text/html" href="http://weblogs.asp.net/hpreishuber/archive/2009/10/22/adhoc-testing-of-net-ria-services.aspx" /><id>http://weblogs.asp.net/hpreishuber/archive/2009/10/22/adhoc-testing-of-net-ria-services.aspx</id><published>2009-10-22T05:57:52Z</published><updated>2009-10-22T05:57:52Z</updated><content type="html">&lt;p&gt;Suddenly my Silverlight 3 application breaks during development process. Cause I have installed Visual Studio 2010 a few hours before, I was sure: &lt;strong&gt;must be something with 2010&lt;/strong&gt;. After uninstall and reinstall SP1 everything worked fine, except .NET RIA services :-(&lt;/p&gt;  &lt;p&gt;So back to structured trouble shoothing. What is the first point, the database- SQL Profiler shows no requests. Second point is Entity model. Till now I do not know any point to interactive test a model. Next point is the RIA Service. But how to call a RIA Service in Browser? I took fiddler to figure it out&lt;/p&gt;  &lt;p&gt;&lt;em&gt;http://localhost:51240/ClientBin/DataService.axd/test3-Web-DomainService1/GetCustomers&lt;/em&gt;&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;Server and Port: here ASP.NET Web Dev Server&lt;/li&gt;    &lt;li&gt;ClientBin directory&lt;/li&gt;    &lt;li&gt;dataservice.axd – you can find the registration of the handler in web.config&lt;/li&gt;    &lt;li&gt;test3 – Application name&lt;/li&gt;    &lt;li&gt;Web – cause service is in website and not in Silverligth project&lt;/li&gt;    &lt;li&gt;DomainService1 – is the name of the domain service class which I selected&lt;/li&gt;    &lt;li&gt;GetCustomers – is the name of the domain service method in the service class to retrieve the customers- here I call northwind DB&lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;Then error message. Reason was admin (natural enemy of developer) locked out a IP from SQL port. Nothing related with VS 2010.&lt;/p&gt;&lt;img src="http://weblogs.asp.net/aggbug.aspx?PostID=7235559" width="1" height="1"&gt;</content><author><name>preishuber</name><uri>http://weblogs.asp.net/members/preishuber.aspx</uri></author><category term=".NET" scheme="http://weblogs.asp.net/hpreishuber/archive/tags/.NET/default.aspx" /><category term="Tips" scheme="http://weblogs.asp.net/hpreishuber/archive/tags/Tips/default.aspx" /><category term="Silverlight" scheme="http://weblogs.asp.net/hpreishuber/archive/tags/Silverlight/default.aspx" /></entry><entry><title>Open SQL Port for specific IP by ASP.NET Website</title><link rel="alternate" type="text/html" href="http://weblogs.asp.net/hpreishuber/archive/2009/08/26/open-sql-port-for-specific-ip-by-asp-net-website.aspx" /><id>http://weblogs.asp.net/hpreishuber/archive/2009/08/26/open-sql-port-for-specific-ip-by-asp-net-website.aspx</id><published>2009-08-26T08:35:42Z</published><updated>2009-08-26T08:35:42Z</updated><content type="html">&lt;p&gt;We run a public SQL Server on Windows Server 2008 and had a lot of dictionary attacks in the past. To prevent that, do following&lt;/p&gt;  &lt;p&gt;1) disable sa user&lt;/p&gt;  &lt;p&gt;2) enable Windows Firewall, set a inbound rule ( here named sql) and lock the port 1433, then add the external IP’s ( scope tab) which needs access from extern&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;&lt;a href="http://weblogs.asp.net/blogs/hpreishuber/image_7100B3C9.png"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="image" border="0" alt="image" src="http://weblogs.asp.net/blogs/hpreishuber/image_thumb_766F246D.png" width="244" height="186" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;Now you are save. New problem is, what happens when you have dynamic IP address on client and need access by SQL Manager or Visual Studio Server Manager. Take really long time to solve that problem. My goal was to establish a website, where you click a button and your IP is in the firewall.&lt;/p&gt;  &lt;p&gt;1) create a user account on server which have exactly the fitting rights for netsh and firewall. Group User should be enough&lt;/p&gt;  &lt;p&gt;2) create in IIS7 a application pool which this account. Impersonation doesn't work. Even start a process which a specific user account. This comes later.&lt;/p&gt;  &lt;p&gt;3) create a Web application in IIS7 (also subdirectory possible) with app pool from 2)&lt;/p&gt;  &lt;p&gt;4) create a command file name sqlip.cmd to set the ips in the firewall and test it on server if it works&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;netsh advfirewall firewall set rule name=&amp;quot;sql&amp;quot; new remoteip=194.x.x.x,195.x.x.x,%1&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;5) create aspx page where you call cmd.exe with processtart. This was complicated and I have to do some workarounds eg. can not call the cmd directly. Have to open cmd.exe and send input to the process.&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;div style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; float: none; padding-top: 0px" id="scid:812469c5-0cb0-4c63-8c15-c81123a09de7:230eca57-3cb9-4468-adfc-e74e8d48c1c3" class="wlWriterEditableSmartContent"&gt;&lt;pre name="code" class="vb"&gt;Protected Sub Button1_Click(ByVal sender As Object, ByVal e As System.EventArgs)
        Dim ps As System.Diagnostics.ProcessStartInfo = New System.Diagnostics.ProcessStartInfo("cmd.exe")
        ps.UseShellExecute = False
        ps.RedirectStandardOutput = True
        ps.RedirectStandardInput = True
        ps.RedirectStandardError = True
        Dim proc As System.Diagnostics.Process = System.Diagnostics.Process.Start(ps)
        Dim strm As System.IO.StreamReader = System.IO.File.OpenText(Server.MapPath("sqlip.cmd"))
        Dim sout As System.IO.StreamReader = proc.StandardOutput
        Dim sIn As System.IO.StreamWriter = proc.StandardInput
        Dim zeile As String
        While (strm.Peek() &amp;gt; 0)
            zeile = Replace(strm.ReadLine(), "%1", Request.UserHostAddress)
            sIn.WriteLine(zeile)
        End While
        sIn.WriteLine("EXIT")
        strm.Close()
End Sub&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;That sample only works for one dynamic ip. If you want more make some list where the Ip’s stored and add the list with netsh. &lt;/p&gt;&lt;img src="http://weblogs.asp.net/aggbug.aspx?PostID=7181730" width="1" height="1"&gt;</content><author><name>preishuber</name><uri>http://weblogs.asp.net/members/preishuber.aspx</uri></author><category term="ASP.NET" scheme="http://weblogs.asp.net/hpreishuber/archive/tags/ASP.NET/default.aspx" /><category term="Sql" scheme="http://weblogs.asp.net/hpreishuber/archive/tags/Sql/default.aspx" /><category term="Security" scheme="http://weblogs.asp.net/hpreishuber/archive/tags/Security/default.aspx" /></entry><entry><title>ASP.NET have left the track?</title><link rel="alternate" type="text/html" href="http://weblogs.asp.net/hpreishuber/archive/2009/08/22/asp-net-have-left-the-track.aspx" /><id>http://weblogs.asp.net/hpreishuber/archive/2009/08/22/asp-net-have-left-the-track.aspx</id><published>2009-08-22T14:25:31Z</published><updated>2009-08-22T14:25:31Z</updated><content type="html">&lt;p&gt;I am a fan of ASP.NET. I have teached hundreds of peoples, written some books, have been MVP for that topic. But now I have doubts. Today I try to build a special kind of user navigation experience. I learn ASP.NET have stopped to grow since version 2.0. ASP.NET 2.0 is the most productive web (even UI ) development technology in the market. But today's needs have changed. For my site I need a Menu control which popup horizontal. Menu control is the same since 2.0 and can only vertical. Some tricks based on &lt;a href="http://cssfriendly.codeplex.com/Release/ProjectReleases.aspx?ReleaseId=2159"&gt;ASP.NET CSS friendly control&lt;/a&gt; adapters does not work cause the development of CSS adapters was stopped in early 2007 (or truly give over to community which is the same). My need is a second static tabbed main menu without dynamic popup. This can be set by MaximumDynamicDisplayLevels to 0. CSS Adapters ignore this setting so I cant use it. &lt;/p&gt;  &lt;p&gt;Instead of investing in UI better new controls, extending parts like AJAX Toolkit Controlextender, ASP.NET team develops fancy stuff. Project Volta or MVC Framework.&amp;#160; The ASP.NET MVC framework is: rewrite everything from scratch with less productivity and less controls. It looks like the early ASP times. How much people in percent needs MVC? How much needs nicer UI?&lt;/p&gt;  &lt;p&gt;Sorry Microsoft I don't understand your goals at this point.&lt;/p&gt;  &lt;p&gt;And it seems 4.0 will not do it better.&lt;/p&gt;&lt;img src="http://weblogs.asp.net/aggbug.aspx?PostID=7177787" width="1" height="1"&gt;</content><author><name>preishuber</name><uri>http://weblogs.asp.net/members/preishuber.aspx</uri></author><category term="ASP.NET" scheme="http://weblogs.asp.net/hpreishuber/archive/tags/ASP.NET/default.aspx" /></entry><entry><title>Silverlight Twitter Client with authentication</title><link rel="alternate" type="text/html" href="http://weblogs.asp.net/hpreishuber/archive/2009/07/30/silverlight-twitter-client-with-authentication.aspx" /><id>http://weblogs.asp.net/hpreishuber/archive/2009/07/30/silverlight-twitter-client-with-authentication.aspx</id><published>2009-07-30T13:00:14Z</published><updated>2009-07-30T13:00:14Z</updated><content type="html">&lt;p&gt;Its not easy to access a cross domain RSS feed. But it is nearly impossible to do same with authentication. HTTP Client stack and HTTP browser stack in Silverlight 3 and beyond does not support authentication. All tricks with manipulating HTTP header throw some not implemented exception.&lt;/p&gt;  &lt;p&gt;For my workaround I use a browser bridge built with Jscript.&lt;/p&gt;  &lt;p&gt;First i created a twitter account and closed the RSS feed to “followers”. Which have the effect that when accessing the RSS with browser Login Dialog is poping up.&lt;/p&gt;  &lt;p&gt;Next step is I add a AJAX Scriptmanager into the aspx page which is hosting Silverlight Plugin. Then i write the JScript code to&amp;#160; access the Twitter url. The magic is inside the HTTP Header. You have to implement “username:password” base64 encoded in authorization header tag. This sample creates from SilverlightInsi:password the base64 string. The encoding will be done later in Silverlight application.&lt;/p&gt;  &lt;div style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; float: none; padding-top: 0px" id="scid:812469c5-0cb0-4c63-8c15-c81123a09de7:5b5449d7-fd7c-49f1-95bf-584220867865" class="wlWriterEditableSmartContent"&gt;&lt;pre name="code" class="js"&gt;function anmelden(user) {
//  base 64 =U2lsdmVybGlnaHRJbnNpOnBhc3N3b3Jk
    var w = new Sys.Net.WebRequest();
    w.set_url("http://twitter.com/statuses/friends_timeline/61248865.rss");
    w.set_httpVerb("GET");
    w.get_headers()["Authorization"] = "Basic " + user;
    w.add_completed(WennFertig);
    w.invoke();
}&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;Now we code a button click in silverlight. With htmlpage helper we can invoke the Jscript RSS download function “anmelden” and pass the security credentials.&lt;/p&gt;

&lt;div style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; float: none; padding-top: 0px" id="scid:812469c5-0cb0-4c63-8c15-c81123a09de7:ce01654f-b6e1-40b3-88f2-4ab289085d57" class="wlWriterEditableSmartContent"&gt;&lt;pre name="code" class="vb"&gt;Private Sub Button_Click(ByVal sender As System.Object, ByVal e As System.Windows.RoutedEventArgs)
    Dim user As String = "SilverlightInsi"
    Dim pwd As String = "password"
    Dim daten() As Byte = System.Text.Encoding.UTF8.GetBytes((user + ":" + pwd))
    HtmlPage.Window.Invoke("anmelden", Convert.ToBase64String(daten))&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;When the data have arrived, Jscript calls function “WennFertig” in ASPX page. There you get the response data (the rss). To bring back the data to Silverligth application we call a managed code function calles Twitterloaded. To get the reference you have to find the Plugin (ID of object). And take the content and use the “sl” object. We will see the why and how a few lines later&lt;/p&gt;

&lt;div style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; float: none; padding-top: 0px" id="scid:812469c5-0cb0-4c63-8c15-c81123a09de7:611ae73c-a1d2-4646-85e2-127f6a8485ab" class="wlWriterEditableSmartContent"&gt;&lt;pre name="code" class="js"&gt; function WennFertig(executor, eventArgs) {
      if (executor.get_responseAvailable()) {
         var SL = document.getElementById("sl1");
          SL.Content.sl.TwitterLoaded(executor.get_responseData());

       }
 }&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;Now we are back in manged code of Silverligth. I register the plug for Jscript as “sl”. This allows Jscript in general to access the insides of the plugin&lt;/p&gt;

&lt;div style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; float: none; padding-top: 0px" id="scid:812469c5-0cb0-4c63-8c15-c81123a09de7:7f029d25-8483-4c87-ab42-962cc33a2e7a" class="wlWriterEditableSmartContent"&gt;&lt;pre name="code" class="vb"&gt; Public Sub New()
        InitializeComponent()
        HtmlPage.RegisterScriptableObject("sl", Me)

    End Sub
&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;We need a managed function which can be called from outside by Jscript. That is declarted by ScriptableMember Attribut. So function “Twitterloaded” can now be invoked from outside. The next lines are quit tricky. I use the Syndication class from Silverlight. This saves a lot of coding, cause I d not need to creat data classes or extra lists.&lt;/p&gt;

&lt;p&gt;&lt;/p&gt;

&lt;div style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; float: none; padding-top: 0px" id="scid:812469c5-0cb0-4c63-8c15-c81123a09de7:2804b1d4-7c7c-4919-ae3d-734494633c9e" class="wlWriterEditableSmartContent"&gt;&lt;pre name="code" class="vb"&gt;&amp;lt;ScriptableMember()&amp;gt; _
Public Sub TwitterLoaded(ByVal daten As String)
        Dim sr As StringReader = New StringReader(daten)
        Dim xr As XmlReader = XmlReader.Create(sr)
        Dim feed As SyndicationFeed = SyndicationFeed.Load(xr)
       datagrid1.ItemsSource = feed.Items.ToList
End Sub&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;&lt;/p&gt;

&lt;p&gt;One issue is left. The SyndicationItem is not a flat datatype. So I have to take in care in XAML binding to refer to right property, like Title.Text. The datagrid gets templatecolumns.&lt;/p&gt;

&lt;div style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; float: none; padding-top: 0px" id="scid:812469c5-0cb0-4c63-8c15-c81123a09de7:7df280b4-9c5d-442a-9d73-0455e2643fe8" class="wlWriterEditableSmartContent"&gt;&lt;pre name="code" class="xml"&gt;  &amp;lt;data:DataGrid.Columns&amp;gt;
       &amp;lt;data:DataGridTemplateColumn Width="200"&amp;gt;
             &amp;lt;data:DataGridTemplateColumn.CellTemplate&amp;gt;
                 &amp;lt;DataTemplate&amp;gt;
                       &amp;lt;TextBlock Text="{Binding Title.Text}" /&amp;gt;
                 &amp;lt;/DataTemplate&amp;gt;
              &amp;lt;/data:DataGridTemplateColumn.CellTemplate&amp;gt;
                    &amp;lt;/data:DataGridTemplateColumn&amp;gt;
       &amp;lt;data:DataGridTemplateColumn Width="100"&amp;gt;
             &amp;lt;data:DataGridTemplateColumn.CellTemplate&amp;gt;
                &amp;lt;DataTemplate&amp;gt;
                       &amp;lt;TextBlock Text="{Binding PublishDate}" /&amp;gt;
                &amp;lt;/DataTemplate&amp;gt;
       &amp;lt;/data:DataGridTemplateColumn.CellTemplate&amp;gt;
    &amp;lt;/data:DataGridTemplateColumn&amp;gt;
&amp;lt;/data:DataGrid.Columns&amp;gt;
 &amp;lt;/data:DataGrid&amp;gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;At the end my application looks like that.&lt;/p&gt;

&lt;p&gt;&lt;a href="http://weblogs.asp.net/blogs/hpreishuber/image_65B09B86.png"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="image" border="0" alt="image" src="http://weblogs.asp.net/blogs/hpreishuber/image_thumb_32082F28.png" width="244" height="177" /&gt;&lt;/a&gt; &lt;/p&gt;

&lt;p&gt;Was hard work, I hope you enjoy it. If you want to learn more you can attend &lt;a href="http://www.ppedv.de/schulung/kurse/silverlight.aspx"&gt;my classes&lt;/a&gt; at ppedv AG.&lt;/p&gt;&lt;img src="http://weblogs.asp.net/aggbug.aspx?PostID=7157985" width="1" height="1"&gt;</content><author><name>preishuber</name><uri>http://weblogs.asp.net/members/preishuber.aspx</uri></author></entry><entry><title>Silverlight 3 Visual Studio 2008 Designer Preview</title><link rel="alternate" type="text/html" href="http://weblogs.asp.net/hpreishuber/archive/2009/07/18/silverlight-3-visual-studio-2008-designer-preview.aspx" /><id>http://weblogs.asp.net/hpreishuber/archive/2009/07/18/silverlight-3-visual-studio-2008-designer-preview.aspx</id><published>2009-07-18T16:29:42Z</published><updated>2009-07-18T16:29:42Z</updated><content type="html">&lt;p&gt;Documentation says that Design Preview in Silverlight 3 Tools for Visual Studio 2008 is away. The preview with Silverlight 2 was only read only and sucks. OK is bad but no preview is even worse. When you right click a XAML file there is still context menu “view Designer”. &lt;/p&gt;  &lt;p&gt;So why? Cause designer is still here- but hidden!&lt;/p&gt;  &lt;p&gt;move mouse to bottom of XAML editor.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://weblogs.asp.net/blogs/hpreishuber/image_69CA296B.png"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="image" border="0" alt="image" src="http://weblogs.asp.net/blogs/hpreishuber/image_thumb_41B77A4C.png" width="244" height="63" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;No mousecoursor is a double arrow which can be drag by mouse down to upper direction.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://weblogs.asp.net/blogs/hpreishuber/image_0E7B40E3.png"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="image" border="0" alt="image" src="http://weblogs.asp.net/blogs/hpreishuber/image_thumb_58F258F0.png" width="244" height="146" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;Now click relaod and ready.&lt;/p&gt;  &lt;p&gt;After closing file- designer setting is away. Perhaps i find a solution somewhere in template settings.&lt;/p&gt;&lt;img src="http://weblogs.asp.net/aggbug.aspx?PostID=7150240" width="1" height="1"&gt;</content><author><name>preishuber</name><uri>http://weblogs.asp.net/members/preishuber.aspx</uri></author><category term="Silverlight" scheme="http://weblogs.asp.net/hpreishuber/archive/tags/Silverlight/default.aspx" /></entry><entry><title>Silverlight 3 Beta to RTW changes</title><link rel="alternate" type="text/html" href="http://weblogs.asp.net/hpreishuber/archive/2009/07/11/silverlight-3-beta-to-rtw-changes.aspx" /><id>http://weblogs.asp.net/hpreishuber/archive/2009/07/11/silverlight-3-beta-to-rtw-changes.aspx</id><published>2009-07-11T08:31:00Z</published><updated>2009-07-11T08:31:00Z</updated><content type="html">&lt;P&gt;It is very important that your applications are ready for Silverlight 3. If you have developed with the Beta bits you have to do a lot of changes to get ready for RTW. There exists a document changes.docx which I can not find at the moment. For that reason I decided to make a copy public on &lt;A href="http://www.preishuber.net/silverlightchanges.rar" mce_href="http://www.preishuber.net/silverlightchanges.rar"&gt;&lt;STRIKE&gt;my private server&lt;/STRIKE&gt;&lt;/A&gt;&lt;STRIKE&gt;.&lt;/STRIKE&gt; &lt;/P&gt;
&lt;P&gt;If you run a Silverlight 2 application no action is necessary. The SL3 plugin can host SL2 applications. So there are no breaking changes between 2 and 3!&lt;/P&gt;
&lt;P&gt;There are a set of bugs fixed in SL 3 related to SL 2. For compatibility reasons Silverlight plugin detects and change to quirks mode running SL 2 applications in a bug friendly mode.&lt;/P&gt;
&lt;P&gt;[Update]thanks to Tim Heuer: link is &lt;A href="http://msdn.microsoft.com/en-us/library/cc645049(VS.95).aspx"&gt;http://msdn.microsoft.com/en-us/library/cc645049(VS.95).aspx&lt;/A&gt;. Saves traffic on my server ;-)&lt;/P&gt;
&lt;P&gt;[/Update]&lt;/P&gt;&lt;img src="http://weblogs.asp.net/aggbug.aspx?PostID=7145409" width="1" height="1"&gt;</content><author><name>preishuber</name><uri>http://weblogs.asp.net/members/preishuber.aspx</uri></author><category term=".NET" scheme="http://weblogs.asp.net/hpreishuber/archive/tags/.NET/default.aspx" /><category term="Silverlight" scheme="http://weblogs.asp.net/hpreishuber/archive/tags/Silverlight/default.aspx" /></entry><entry><title>ADO.NET Dataservice This collection already contains an address with scheme http PartII</title><link rel="alternate" type="text/html" href="http://weblogs.asp.net/hpreishuber/archive/2009/01/22/ado-net-dataservice-this-collection-already-contains-an-address-with-scheme-http-partii.aspx" /><id>http://weblogs.asp.net/hpreishuber/archive/2009/01/22/ado-net-dataservice-this-collection-already-contains-an-address-with-scheme-http-partii.aspx</id><published>2009-01-22T20:04:39Z</published><updated>2009-01-22T20:04:39Z</updated><content type="html">&lt;p&gt;You may have searched for&lt;/p&gt;  &lt;p&gt;&lt;em&gt;&lt;strong&gt;This collection already contains an address with scheme http.&amp;#160; There can be at most one address per scheme in this collection.&lt;/strong&gt;&lt;/em&gt;&lt;/p&gt;  &lt;p&gt;Parameter name: item    &lt;br /&gt;&lt;/p&gt;  &lt;p&gt;I have written some time ago &lt;a href="http://weblogs.asp.net/hpreishuber/archive/2008/10/10/ado-net-dataservices-this-collection-already-contains-an-address-with-scheme-http.aspx"&gt;a blog post&lt;/a&gt; which have a workaround with removing http headers in iis.&lt;/p&gt;  &lt;p&gt;Now I found in documentation prefixfilters which allow the use of ado.net dataservice with multiple host headers on website. There must be some setting in web.config like&lt;/p&gt;  &lt;pre class="csharpcode"&gt;  &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;system.serviceModel&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;
    &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;serviceHostingEnvironment&lt;/span&gt; &lt;span class="attr"&gt;aspNetCompatibilityEnabled&lt;/span&gt;&lt;span class="kwrd"&gt;=&amp;quot;true&amp;quot;&lt;/span&gt; &lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;
    &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;baseAddressPrefixFilters&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;
      &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;add&lt;/span&gt; &lt;span class="attr"&gt;prefix&lt;/span&gt;&lt;span class="kwrd"&gt;=&amp;quot;http://www.vsone.de&amp;quot;&lt;/span&gt;&lt;span class="kwrd"&gt;/&amp;gt;&lt;/span&gt;
    &lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;baseAddressPrefixFilters&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;
    &lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;serviceHostingEnvironment&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;
  &lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;system.serviceModel&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;
&lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;configuration&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;
&lt;style type="text/css"&gt;





.csharpcode, .csharpcode pre
{
	font-size: small;
	color: black;
	font-family: consolas, "Courier New", courier, monospace;
	background-color: #ffffff;
	/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt 
{
	background-color: #f4f4f4;
	width: 100%;
	margin: 0em;
}
.csharpcode .lnum { color: #606060; }&lt;/style&gt;

&lt;p&gt;No I run in second problem.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;&lt;strong&gt;IIS specified authentication schemes 'Basic, Anonymous', but the binding only supports specification of exactly one authentication scheme.&lt;/strong&gt;&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;OK- it’s easy to change that in IIS. But what's about authenticated access e.g. for Frontpage server extensions?&lt;/p&gt;

&lt;p&gt;Still looking…. 
  &lt;br /&gt;&lt;/p&gt;

&lt;p&gt;Next I got a error message&lt;/p&gt;

&lt;p&gt;&lt;em&gt;&lt;strong&gt;Request Error 
      &lt;br /&gt;The server encountered an error processing the request. See server logs for more details&lt;/strong&gt;&lt;/em&gt; 

  &lt;br /&gt;aha-mhh- which logs- where, WTF?&lt;/p&gt;

&lt;p&gt;I found a sloution to display the full error within browser. You have to add in service metadata.&lt;/p&gt;

&lt;pre class="csharpcode"&gt;&amp;lt;System.ServiceModel.ServiceBehavior(IncludeExceptionDetailInFaults := &lt;span class="kwrd"&gt;true&lt;/span&gt;)&amp;gt; _
&lt;span class="kwrd"&gt;Public&lt;/span&gt; &lt;span class="kwrd"&gt;Class&lt;/span&gt; EventDataService1&lt;/pre&gt;
&lt;style type="text/css"&gt;



.csharpcode, .csharpcode pre
{
	font-size: small;
	color: black;
	font-family: consolas, "Courier New", courier, monospace;
	background-color: #ffffff;
	/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt 
{
	background-color: #f4f4f4;
	width: 100%;
	margin: 0em;
}
.csharpcode .lnum { color: #606060; }&lt;/style&gt;

&lt;p&gt;Now I have the next error:&lt;/p&gt;

&lt;p class="intro"&gt;&lt;em&gt;&lt;strong&gt;bei System.Data.Metadata.Edm.MetadataArtifactLoaderCompositeResource.LoadResources(String assemblyName, String resourceName, ICollection`1 uriRegistry, MetadataArtifactAssemblyResolver resolver) bei System.Data.Metadata.Edm.MetadataArtifactLoaderCompositeResource.CreateResourceLoader(String path, ExtensionCheck extensionCheck, String validExtension, ICollection`1 uriRegistry, MetadataArtifactAssemblyResolver resolver) bei System.Data.Metadata.Edm.MetadataArtifactLoader.Create(String path, ExtensionCheck extensionCheck, String validExtension, ICollection`1 uriRegistry, MetadataArtifactAssemblyResolver resolver) bei System.Data.EntityClient.EntityConnection.SplitPaths(String paths) bei System.Data.EntityClient.EntityConnection.GetMetadataWorkspace(Boolean initializeAllCollections) bei System.Data.Objects.ObjectContext.RetrieveMetadataWorkspaceFromConnection() bei System.Data.Objects.ObjectContext..ctor(EntityConnection connection, Boolean isConnectionConstructor) bei System.Data.Objects.ObjectContext..ctor(String connectionString, String defaultContainerName) bei eventsEntities..ctor() in C:\Inetpub\vs2005\App_Code\Model1.Designer.vb:Zeile 27. bei invoke_constructor() bei System.Data.Services.DataService`1.CreateDataSource() bei System.Data.Services.DataService`1.EnsureProviderAndConfigForRequest() bei System.Data.Services.DataService`1.ProcessRequestForMessage(Stream messageBody) bei SyncInvokeProcessRequestForMessage(Object , Object[] , Object[] ) bei System.ServiceModel.Dispatcher.SyncMethodInvoker.Invoke(Object instance, Object[] inputs, Object[]&amp;amp; outputs) bei System.ServiceModel.Dispatcher.DispatchOperationRuntime.InvokeBegin(MessageRpc&amp;amp; rpc) bei System.ServiceModel.Dispatcher.ImmutableDispatchRuntime.ProcessMessage5(MessageRpc&amp;amp; rpc) bei System.ServiceModel.Dispatcher.ImmutableDispatchRuntime.ProcessMessage4(MessageRpc&amp;amp; rpc) bei System.ServiceModel.Dispatcher.ImmutableDispatchRuntime.ProcessMessage3(MessageRpc&amp;amp; rpc) bei System.ServiceModel.Dispatcher.ImmutableDispatchRuntime.ProcessMessage2(MessageRpc&amp;amp; rpc) bei System.ServiceModel.Dispatcher.ImmutableDispatchRuntime.ProcessMessage1(MessageRpc&amp;amp; rpc) bei System.ServiceModel.Dispatcher.MessageRpc.Process(Boolean isOperationContextSet)&lt;/strong&gt;&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;Reason now is that I developed with a Silverlight 2 project. And destination is a website. Connection String must be diffrent.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Web Project&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;connectionString=&amp;quot;metadata=res://*/Model1.csdl|res://*/Model1.ssdl|res://*/Model1.msl;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Web Site&lt;/strong&gt;&lt;/p&gt;
&lt;font color="#0000ff" size="2"&gt;&lt;font color="#333333" size="2"&gt;
    &lt;p&gt;connectionString=&amp;quot;metadata=res://*;&lt;/p&gt;
  &lt;/font&gt;&lt;/font&gt;&lt;img src="http://weblogs.asp.net/aggbug.aspx?PostID=6857010" width="1" height="1"&gt;</content><author><name>preishuber</name><uri>http://weblogs.asp.net/members/preishuber.aspx</uri></author><category term="ASP.NET" scheme="http://weblogs.asp.net/hpreishuber/archive/tags/ASP.NET/default.aspx" /><category term=".NET" scheme="http://weblogs.asp.net/hpreishuber/archive/tags/.NET/default.aspx" /></entry><entry><title>Silverlight 2.0 Compression Rate</title><link rel="alternate" type="text/html" href="http://weblogs.asp.net/hpreishuber/archive/2009/01/02/silverlight-2-0-compression-rate.aspx" /><id>http://weblogs.asp.net/hpreishuber/archive/2009/01/02/silverlight-2-0-compression-rate.aspx</id><published>2009-01-02T14:11:00Z</published><updated>2009-01-02T14:11:00Z</updated><content type="html">&lt;P&gt;After a short discussion in silverlight forums with a guy who have only 19kb line, I checked out compression for XAP files. A XAP is a zipped package of DLL’s and resources. With winrar installed you can open by context menu from Visual Studio Explorer the xap (clientbin). It contains files like&lt;/P&gt;
&lt;P&gt;&lt;A href="http://weblogs.asp.net/blogs/hpreishuber/image_4A667910.png" mce_href="http://weblogs.asp.net/blogs/hpreishuber/image_4A667910.png"&gt;&lt;IMG style="BORDER-RIGHT-WIDTH: 0px; DISPLAY: inline; BORDER-TOP-WIDTH: 0px; BORDER-BOTTOM-WIDTH: 0px; BORDER-LEFT-WIDTH: 0px" title=image border=0 alt=image src="http://weblogs.asp.net/blogs/hpreishuber/image_thumb_36F5510A.png" width=473 height=274 mce_src="http://weblogs.asp.net/blogs/hpreishuber/image_thumb_36F5510A.png"&gt;&lt;/A&gt; &lt;/P&gt;
&lt;P&gt;The size of the package in this case is 750 KB. I unzipped the content and compressed it with Winrar again and- surprise- surprise, package size is now 547 KB. A reduction more than 35%. Only rename the zip back to xap. &lt;/P&gt;
&lt;P&gt;I will investigate a little bit, how to automate that within the build process.&lt;/P&gt;&lt;img src="http://weblogs.asp.net/aggbug.aspx?PostID=6814938" width="1" height="1"&gt;</content><author><name>preishuber</name><uri>http://weblogs.asp.net/members/preishuber.aspx</uri></author><category term=".NET" scheme="http://weblogs.asp.net/hpreishuber/archive/tags/.NET/default.aspx" /><category term="Silverlight" scheme="http://weblogs.asp.net/hpreishuber/archive/tags/Silverlight/default.aspx" /></entry><entry><title>B# and Silverlight Isolated Storage</title><link rel="alternate" type="text/html" href="http://weblogs.asp.net/hpreishuber/archive/2008/11/29/b-and-silverlight-isolated-storage.aspx" /><id>http://weblogs.asp.net/hpreishuber/archive/2008/11/29/b-and-silverlight-isolated-storage.aspx</id><published>2008-11-29T09:02:54Z</published><updated>2008-11-29T09:02:54Z</updated><content type="html">&lt;p&gt;I am a VB developer. As most of expert coder are using C# I must step forward. B# is the language which can be written by VB guys and make it readable for C# gurus. Today's topic is the data store of Silverlight on client side- isolated storage.&lt;/p&gt;  &lt;p&gt;Isolated Storage is a concept from .NET. It allows to store information on a per application base, like cookies. Major differences are much more space and more security. There exists several ways to store data. First option is like ASP.NET appsettings. &lt;/p&gt;  &lt;pre class="csharpcode"&gt; &lt;span class="kwrd"&gt;Private&lt;/span&gt; appSettings &lt;span class="kwrd"&gt;As&lt;/span&gt; IsolatedStorageSettings = _
           IsolatedStorageSettings.ApplicationSettings &lt;span class="rem"&gt;';&lt;/span&gt;&lt;/pre&gt;
&lt;style type="text/css"&gt;

.csharpcode, .csharpcode pre
{
	font-size: small;
	color: black;
	font-family: consolas, "Courier New", courier, monospace;
	background-color: #ffffff;
	/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt 
{
	background-color: #f4f4f4;
	width: 100%;
	margin: 0em;
}
.csharpcode .lnum { color: #606060; }&lt;/style&gt;

&lt;p&gt;Based on a Key Object collection you can store simple data like strings or also complex data like generic lists.&lt;/p&gt;

&lt;pre class="csharpcode"&gt; &lt;span class="kwrd"&gt;Dim&lt;/span&gt; liste &lt;span class="kwrd"&gt;As&lt;/span&gt; &lt;span class="kwrd"&gt;New&lt;/span&gt; List(Of tasks)&lt;span class="rem"&gt;';&lt;/span&gt;
.....
 appSettings.Add(&lt;span class="str"&gt;&amp;quot;daten&amp;quot;&lt;/span&gt;, liste) &lt;span class="rem"&gt;';&lt;/span&gt;
 appSettings.Add(&lt;span class="str"&gt;&amp;quot;test&amp;quot;&lt;/span&gt;, &lt;span class="kwrd"&gt;New&lt;/span&gt; &lt;span class="kwrd"&gt;Date&lt;/span&gt;)&lt;span class="rem"&gt;';&lt;/span&gt;
 appSettings.Add(&lt;span class="str"&gt;&amp;quot;hannesKey&amp;quot;&lt;/span&gt;, &lt;span class="str"&gt;&amp;quot;Hannes Preishuber&amp;quot;&lt;/span&gt;)';&lt;/pre&gt;
&lt;style type="text/css"&gt;

.csharpcode, .csharpcode pre
{
	font-size: small;
	color: black;
	font-family: consolas, "Courier New", courier, monospace;
	background-color: #ffffff;
	/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt 
{
	background-color: #f4f4f4;
	width: 100%;
	margin: 0em;
}
.csharpcode .lnum { color: #606060; }&lt;/style&gt;

&lt;p&gt;Reading is as simple&lt;/p&gt;

&lt;pre class="csharpcode"&gt; ausgabe.Text = appSettings(&lt;span class="str"&gt;&amp;quot;hannesKey&amp;quot;&lt;/span&gt;)&lt;span class="rem"&gt;';&lt;/span&gt;&lt;/pre&gt;
&lt;style type="text/css"&gt;

.csharpcode, .csharpcode pre
{
	font-size: small;
	color: black;
	font-family: consolas, "Courier New", courier, monospace;
	background-color: #ffffff;
	/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt 
{
	background-color: #f4f4f4;
	width: 100%;
	margin: 0em;
}
.csharpcode .lnum { color: #606060; }&lt;/style&gt;

&lt;p&gt;Isolated storage can also be used like a file system to store images or xaml. Code is written with B#.&lt;/p&gt;

&lt;pre class="csharpcode"&gt;Using mystore &lt;span class="kwrd"&gt;As&lt;/span&gt; IsolatedStorageFile = _
        IsolatedStorageFile.GetUserStoreForApplication()&lt;span class="rem"&gt;';&lt;/span&gt;
     &lt;/pre&gt;
&lt;style type="text/css"&gt;

.csharpcode, .csharpcode pre
{
	font-size: small;
	color: black;
	font-family: consolas, "Courier New", courier, monospace;
	background-color: #ffffff;
	/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt 
{
	background-color: #f4f4f4;
	width: 100%;
	margin: 0em;
}
.csharpcode .lnum { color: #606060; }&lt;/style&gt;

&lt;p&gt;There are a lot of samples in web which shows file read and write access. I will top that with storing objects as file. For that object must be serialized. Silverlight supports XAML with DataContractSerializer class or JSON with DataContractJsonSerializer. For the last one you need to reference System.ServiceModel.Web.dll. With following code you can write the generic list as stream. &lt;/p&gt;

&lt;pre class="csharpcode"&gt; &lt;span class="kwrd"&gt;Dim&lt;/span&gt; memStream &lt;span class="kwrd"&gt;As&lt;/span&gt; &lt;span class="kwrd"&gt;New&lt;/span&gt; MemoryStream&lt;span class="rem"&gt;';&lt;/span&gt;
 &lt;span class="kwrd"&gt;Dim&lt;/span&gt; ser &lt;span class="kwrd"&gt;As&lt;/span&gt; &lt;span class="kwrd"&gt;New&lt;/span&gt; DataContractJsonSerializer(liste.&lt;span class="kwrd"&gt;GetType&lt;/span&gt;)&lt;span class="rem"&gt;';&lt;/span&gt;
 ser.WriteObject(memStream, liste)&lt;span class="rem"&gt;';&lt;/span&gt;
 memStream.Position = 0&lt;span class="rem"&gt;';&lt;/span&gt;
 &lt;span class="kwrd"&gt;Dim&lt;/span&gt; mystore &lt;span class="kwrd"&gt;As&lt;/span&gt; IsolatedStorageFile = IsolatedStorageFile.GetUserStoreForApplication()&lt;span class="rem"&gt;';&lt;/span&gt;
 Using reader &lt;span class="kwrd"&gt;As&lt;/span&gt; &lt;span class="kwrd"&gt;New&lt;/span&gt; StreamReader(memStream)&lt;span class="rem"&gt;';&lt;/span&gt;
    Using writeStream &lt;span class="kwrd"&gt;As&lt;/span&gt; &lt;span class="kwrd"&gt;New&lt;/span&gt; IsolatedStorageFileStream(&lt;span class="str"&gt;&amp;quot;meinObjekt.txt&amp;quot;&lt;/span&gt;, _
FileMode.Create, mystore)&lt;span class="rem"&gt;';&lt;/span&gt;
           Using writer &lt;span class="kwrd"&gt;As&lt;/span&gt; &lt;span class="kwrd"&gt;New&lt;/span&gt; StreamWriter(writeStream)&lt;span class="rem"&gt;';&lt;/span&gt;
                  &lt;span class="kwrd"&gt;Dim&lt;/span&gt; temp &lt;span class="kwrd"&gt;As&lt;/span&gt; &lt;span class="kwrd"&gt;String&lt;/span&gt; = reader.ReadToEnd&lt;span class="rem"&gt;';&lt;/span&gt;
                  writer.Write(temp)&lt;span class="rem"&gt;';&lt;/span&gt;
            &lt;span class="kwrd"&gt;End&lt;/span&gt; Using&lt;span class="rem"&gt;';&lt;/span&gt;
     &lt;span class="kwrd"&gt;End&lt;/span&gt; Using&lt;span class="rem"&gt;';&lt;/span&gt;
&lt;span class="kwrd"&gt;End&lt;/span&gt; Using';&lt;/pre&gt;
&lt;style type="text/css"&gt;

.csharpcode, .csharpcode pre
{
	font-size: small;
	color: black;
	font-family: consolas, "Courier New", courier, monospace;
	background-color: #ffffff;
	/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt 
{
	background-color: #f4f4f4;
	width: 100%;
	margin: 0em;
}
.csharpcode .lnum { color: #606060; }&lt;/style&gt;

&lt;p&gt;What have been written can be read&lt;/p&gt;

&lt;pre class="csharpcode"&gt;Using mystore &lt;span class="kwrd"&gt;As&lt;/span&gt; IsolatedStorageFile = _&lt;span class="rem"&gt;';&lt;/span&gt;
        IsolatedStorageFile.GetUserStoreForApplication()&lt;span class="rem"&gt;';&lt;/span&gt;
        Using fStream &lt;span class="kwrd"&gt;As&lt;/span&gt; &lt;span class="kwrd"&gt;New&lt;/span&gt; IsolatedStorageFileStream( _&lt;span class="rem"&gt;';&lt;/span&gt;
              &lt;span class="str"&gt;&amp;quot;meinObjekt.txt&amp;quot;&lt;/span&gt;, FileMode.OpenOrCreate, mystore)&lt;span class="rem"&gt;';&lt;/span&gt;
            Using sr &lt;span class="kwrd"&gt;As&lt;/span&gt; &lt;span class="kwrd"&gt;New&lt;/span&gt; StreamReader(fStream)&lt;span class="rem"&gt;';&lt;/span&gt;
                    ausgabe.Text = sr.ReadToEnd()&lt;span class="rem"&gt;';&lt;/span&gt;
            &lt;span class="kwrd"&gt;End&lt;/span&gt; Using&lt;span class="rem"&gt;';&lt;/span&gt;
        &lt;span class="kwrd"&gt;End&lt;/span&gt; Using&lt;span class="rem"&gt;';&lt;/span&gt;
&lt;span class="kwrd"&gt;End&lt;/span&gt; Using&lt;span class="rem"&gt;';&lt;/span&gt;&lt;/pre&gt;
&lt;style type="text/css"&gt;

.csharpcode, .csharpcode pre
{
	font-size: small;
	color: black;
	font-family: consolas, "Courier New", courier, monospace;
	background-color: #ffffff;
	/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt 
{
	background-color: #f4f4f4;
	width: 100%;
	margin: 0em;
}
.csharpcode .lnum { color: #606060; }&lt;/style&gt;

&lt;p&gt;The sample writes to Textblock as JSON&lt;/p&gt;

&lt;p&gt;&lt;a href="http://weblogs.asp.net/blogs/hpreishuber/image_62449EDF.png"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="image" border="0" alt="image" src="http://weblogs.asp.net/blogs/hpreishuber/image_thumb_277CF609.png" width="244" height="154" /&gt;&lt;/a&gt; &lt;/p&gt;

&lt;p&gt;same as XML with DataContractSerializer&lt;/p&gt;

&lt;p&gt;&lt;a href="http://weblogs.asp.net/blogs/hpreishuber/image_08E30560.png"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="image" border="0" alt="image" src="http://weblogs.asp.net/blogs/hpreishuber/image_thumb_336EC070.png" width="244" height="152" /&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://weblogs.asp.net/aggbug.aspx?PostID=6759769" width="1" height="1"&gt;</content><author><name>preishuber</name><uri>http://weblogs.asp.net/members/preishuber.aspx</uri></author><category term="C#" scheme="http://weblogs.asp.net/hpreishuber/archive/tags/C_2300_/default.aspx" /><category term=".NET" scheme="http://weblogs.asp.net/hpreishuber/archive/tags/.NET/default.aspx" /><category term="VB.NET" scheme="http://weblogs.asp.net/hpreishuber/archive/tags/VB.NET/default.aspx" /><category term="Silverlight" scheme="http://weblogs.asp.net/hpreishuber/archive/tags/Silverlight/default.aspx" /></entry><entry><title>Input Validation with Silverlight</title><link rel="alternate" type="text/html" href="http://weblogs.asp.net/hpreishuber/archive/2008/11/23/input-validation-with-silverlight.aspx" /><id>http://weblogs.asp.net/hpreishuber/archive/2008/11/23/input-validation-with-silverlight.aspx</id><published>2008-11-23T10:23:00Z</published><updated>2008-11-23T10:23:00Z</updated><content type="html">&lt;P&gt;I miss ASP.NET. With the 2.0 Microsoft had the world best technology for creating applications of all kind. Small or large, ASP.NET 2.0 have features for all. Now several years later we have Silverlight 2 (no 2.0) and should be good as ASP.NET 2.0!? I don't think so- Silverlight have some great advantages but even more missing features. And some of them essential and important. &lt;/P&gt;
&lt;P&gt;For me user input validation is one of them. To get the right data from user in correct format is a huge challenge and costs a lot of development time. ASP.NET have rich and easy validator controls to do the job. Silverlight have not.&lt;/P&gt;
&lt;P&gt;But Input validation must done, so how? I will show you my approach. First of all, where to validate?&lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;Database &lt;/LI&gt;
&lt;LI&gt;Data Layer &lt;/LI&gt;
&lt;LI&gt;UI Layer &lt;/LI&gt;
&lt;LI&gt;User Interface &lt;/LI&gt;
&lt;LI&gt;Nowhere &lt;/LI&gt;&lt;/UL&gt;
&lt;P&gt;I don't like typing things several times. I hate to make data access and type field name 10 times in table, properties and UI. I like the drag and drop stuff and get declaration of where and how my data comes. (no dataset at all ;-)).&amp;nbsp; Silverlight doesn't have that by design and by architecture. The design part comes from Microsoft they have not enough resources to implement every feature within some weeks. &lt;/P&gt;
&lt;P&gt;Second problem with data validation comes from loosely connected systems. The user interface is fare fare away from database. Sometimes thousands of km/ miles are between them. Proxy server, hubs, switches even different protocols and ports. So from that view it doesn't make sense to get data schema each time from table and reuse it in UI. &lt;/P&gt;
&lt;P&gt;Input validation rules must be declared physical narrow to user interface. The closest thing I can imaging is within the same memory address space.&lt;/P&gt;
&lt;H1&gt;The practice&lt;/H1&gt;
&lt;P&gt;Cause of disliking typing code I use a ADO.NET Entity model and a ADO.NET Dataservice to get the data. Visual Studio 2008 creates a proxy class (reference.vb) for the Silverlight project. Database is northwind with table customer. The goal is a input dialog. Phone number is limited to 20 characters. Error is shown as tooltip (zu lange). Textfield is marked as read. Tabbing out will do the validation.&lt;/P&gt;
&lt;P&gt;&lt;IMG style="WIDTH: 460px; HEIGHT: 370px" height=370 src="http://weblogs.asp.net/blogs/hpreishuber/image_08E446DE.png" width=460 mce_src="http://weblogs.asp.net/blogs/hpreishuber/image_08E446DE.png"&gt;&lt;/P&gt;
&lt;P&gt;First of all I create the rule set. I do that in the created proxy class (reference.vb) and check the length and throw an exception.&lt;/P&gt;&lt;PRE class=csharpcode&gt;&lt;SPAN class=kwrd&gt;Public&lt;/SPAN&gt; &lt;SPAN class=kwrd&gt;Property&lt;/SPAN&gt; Phone() &lt;SPAN class=kwrd&gt;As&lt;/SPAN&gt; &lt;SPAN class=kwrd&gt;String&lt;/SPAN&gt;
        &lt;SPAN class=kwrd&gt;Get&lt;/SPAN&gt;
                &lt;SPAN class=kwrd&gt;Return&lt;/SPAN&gt; &lt;SPAN class=kwrd&gt;Me&lt;/SPAN&gt;._Phone
        &lt;SPAN class=kwrd&gt;End&lt;/SPAN&gt; &lt;SPAN class=kwrd&gt;Get&lt;/SPAN&gt;
        &lt;SPAN class=kwrd&gt;Set&lt;/SPAN&gt;
                &lt;SPAN class=kwrd&gt;If&lt;/SPAN&gt; Len(value) &amp;gt; 20 &lt;SPAN class=kwrd&gt;Then&lt;/SPAN&gt;
                    &lt;SPAN class=kwrd&gt;Throw&lt;/SPAN&gt; &lt;SPAN class=kwrd&gt;New&lt;/SPAN&gt; Exception(&lt;SPAN class=str&gt;"zu lange"&lt;/SPAN&gt;)
                &lt;SPAN class=kwrd&gt;End&lt;/SPAN&gt; &lt;SPAN class=kwrd&gt;If&lt;/SPAN&gt;
                &lt;SPAN class=kwrd&gt;Me&lt;/SPAN&gt;.OnPhoneChanging(value)
                &lt;SPAN class=kwrd&gt;Me&lt;/SPAN&gt;._Phone = value
                &lt;SPAN class=kwrd&gt;Me&lt;/SPAN&gt;.OnPhoneChanged()
        &lt;SPAN class=kwrd&gt;End&lt;/SPAN&gt; &lt;SPAN class=kwrd&gt;Set&lt;/SPAN&gt;
&lt;SPAN class=kwrd&gt;End&lt;/SPAN&gt; Property&lt;/PRE&gt;
&lt;STYLE type=text/css&gt;

.csharpcode, .csharpcode pre
{
	font-size: small;
	color: black;
	font-family: consolas, "Courier New", courier, monospace;
	background-color: #ffffff;
	/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt 
{
	background-color: #f4f4f4;
	width: 100%;
	margin: 0em;
}
.csharpcode .lnum { color: #606060; }&lt;/STYLE&gt;

&lt;P&gt;Not the best solution. If somebody is updating service reference, your code will be overwritten.&lt;/P&gt;
&lt;P&gt;The databinding in the Textbox must have twoway binding and two additional attributes set. That is necessary to get a special event in error case (exception) which will defined in next step&lt;/P&gt;&lt;PRE class=csharpcode&gt;&lt;SPAN class=kwrd&gt;&amp;lt;&lt;/SPAN&gt;&lt;SPAN class=html&gt;TextBox&lt;/SPAN&gt; &lt;SPAN class=attr&gt;Margin&lt;/SPAN&gt;&lt;SPAN class=kwrd&gt;="8,8,144,8"&lt;/SPAN&gt; &lt;SPAN class=attr&gt;Grid&lt;/SPAN&gt;.&lt;SPAN class=attr&gt;Column&lt;/SPAN&gt;&lt;SPAN class=kwrd&gt;="1"&lt;/SPAN&gt; &lt;SPAN class=attr&gt;Grid&lt;/SPAN&gt;.&lt;SPAN class=attr&gt;Row&lt;/SPAN&gt;&lt;SPAN class=kwrd&gt;="3"&lt;/SPAN&gt; 
&lt;SPAN class=attr&gt;Text&lt;/SPAN&gt;&lt;SPAN class=kwrd&gt;="{Binding Phone,Mode=TwoWay,NotifyOnValidationError=true,  
ValidatesOnExceptions=true}"&lt;/SPAN&gt;&lt;SPAN class=kwrd&gt;/&amp;gt;&lt;/SPAN&gt;&lt;/PRE&gt;
&lt;STYLE type=text/css&gt;

.csharpcode, .csharpcode pre
{
	font-size: small;
	color: black;
	font-family: consolas, "Courier New", courier, monospace;
	background-color: #ffffff;
	/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt 
{
	background-color: #f4f4f4;
	width: 100%;
	margin: 0em;
}
.csharpcode .lnum { color: #606060; }&lt;/STYLE&gt;

&lt;P&gt;Then we can create the code for the event BindingValidationError of the grid, named Layoutroot. I decided to show the exception message as tooltip and to change backcolor of Texbox. eventargs gives reference to Textbox and also to eventaction (Added, Removed)&lt;/P&gt;&lt;PRE class=csharpcode&gt;&lt;SPAN class=kwrd&gt;Private&lt;/SPAN&gt; &lt;SPAN class=kwrd&gt;Sub&lt;/SPAN&gt; LayoutRoot_BindingValidationError(&lt;SPAN class=kwrd&gt;ByVal&lt;/SPAN&gt; sender &lt;SPAN class=kwrd&gt;As&lt;/SPAN&gt; System.&lt;SPAN class=kwrd&gt;Object&lt;/SPAN&gt;, 
&lt;SPAN class=kwrd&gt;ByVal&lt;/SPAN&gt; e &lt;SPAN class=kwrd&gt;As&lt;/SPAN&gt; System.Windows.Controls.ValidationErrorEventArgs)
     &lt;SPAN class=kwrd&gt;If&lt;/SPAN&gt; e.Action = ValidationErrorEventAction.Added &lt;SPAN class=kwrd&gt;Then&lt;/SPAN&gt;
            &lt;SPAN class=kwrd&gt;CType&lt;/SPAN&gt;(e.OriginalSource, TextBox).Background = _
&lt;SPAN class=kwrd&gt;New&lt;/SPAN&gt; SolidColorBrush(Colors.Red)
            ToolTipService.SetToolTip(&lt;SPAN class=kwrd&gt;CType&lt;/SPAN&gt;(e.OriginalSource, TextBox), _
e.&lt;SPAN class=kwrd&gt;Error&lt;/SPAN&gt;.Exception.Message)
     &lt;SPAN class=kwrd&gt;Else&lt;/SPAN&gt;
            &lt;SPAN class=kwrd&gt;CType&lt;/SPAN&gt;(e.OriginalSource, TextBox).Background = _
&lt;SPAN class=kwrd&gt;New&lt;/SPAN&gt; SolidColorBrush(Colors.White)
     &lt;SPAN class=kwrd&gt;End&lt;/SPAN&gt; &lt;SPAN class=kwrd&gt;If&lt;/SPAN&gt;
&lt;SPAN class=kwrd&gt;End&lt;/SPAN&gt; &lt;SPAN class=kwrd&gt;Sub&lt;/SPAN&gt;&lt;/PRE&gt;
&lt;STYLE type=text/css&gt;

.csharpcode, .csharpcode pre
{
	font-size: small;
	color: black;
	font-family: consolas, "Courier New", courier, monospace;
	background-color: #ffffff;
	/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt 
{
	background-color: #f4f4f4;
	width: 100%;
	margin: 0em;
}
.csharpcode .lnum { color: #606060; }&lt;/STYLE&gt;

&lt;P&gt;Full code for completion&lt;/P&gt;&lt;PRE class=csharpcode&gt;Partial &lt;SPAN class=kwrd&gt;Public&lt;/SPAN&gt; &lt;SPAN class=kwrd&gt;Class&lt;/SPAN&gt; page29
    &lt;SPAN class=kwrd&gt;Inherits&lt;/SPAN&gt; UserControl
    &lt;SPAN class=kwrd&gt;Dim&lt;/SPAN&gt; cust &lt;SPAN class=kwrd&gt;As&lt;/SPAN&gt; ServiceReference1.NorthwindEntities = _&lt;BR&gt;&lt;SPAN class=kwrd&gt;New&lt;/SPAN&gt; ServiceReference1.NorthwindEntities(&lt;SPAN class=kwrd&gt;New&lt;/SPAN&gt; Uri(&lt;SPAN class=str&gt;"WebDataService1.svc"&lt;/SPAN&gt;, UriKind.Relative))

    &lt;SPAN class=kwrd&gt;Public&lt;/SPAN&gt; &lt;SPAN class=kwrd&gt;Sub&lt;/SPAN&gt; &lt;SPAN class=kwrd&gt;New&lt;/SPAN&gt; 
        InitializeComponent()
    &lt;SPAN class=kwrd&gt;End&lt;/SPAN&gt; &lt;SPAN class=kwrd&gt;Sub&lt;/SPAN&gt;

    

    &lt;SPAN class=kwrd&gt;Private&lt;/SPAN&gt; &lt;SPAN class=kwrd&gt;Sub&lt;/SPAN&gt; page29_Loaded(&lt;SPAN class=kwrd&gt;ByVal&lt;/SPAN&gt; sender &lt;SPAN class=kwrd&gt;As&lt;/SPAN&gt; &lt;SPAN class=kwrd&gt;Object&lt;/SPAN&gt;, &lt;BR&gt;&lt;SPAN class=kwrd&gt;ByVal&lt;/SPAN&gt; e &lt;SPAN class=kwrd&gt;As&lt;/SPAN&gt; System.Windows.RoutedEventArgs) &lt;SPAN class=kwrd&gt;Handles&lt;/SPAN&gt; &lt;SPAN class=kwrd&gt;Me&lt;/SPAN&gt;.Loaded
        cust.BeginExecute(Of ServiceReference1.Customers)_&lt;BR&gt;(&lt;SPAN class=kwrd&gt;New&lt;/SPAN&gt; Uri(&lt;SPAN class=str&gt;"Customers"&lt;/SPAN&gt;, UriKind.Relative), &lt;SPAN class=kwrd&gt;AddressOf&lt;/SPAN&gt; fertig, cust)

    &lt;SPAN class=kwrd&gt;End&lt;/SPAN&gt; &lt;SPAN class=kwrd&gt;Sub&lt;/SPAN&gt;
    &lt;SPAN class=kwrd&gt;Public&lt;/SPAN&gt; &lt;SPAN class=kwrd&gt;Sub&lt;/SPAN&gt; fertig(&lt;SPAN class=kwrd&gt;ByVal&lt;/SPAN&gt; result &lt;SPAN class=kwrd&gt;As&lt;/SPAN&gt; IAsyncResult)
        LayoutRoot.DataContext = _&lt;BR&gt;cust.EndExecute(Of ServiceReference1.Customers)(result).First

    &lt;SPAN class=kwrd&gt;End&lt;/SPAN&gt; &lt;SPAN class=kwrd&gt;Sub&lt;/SPAN&gt;

    &lt;SPAN class=kwrd&gt;Private&lt;/SPAN&gt; &lt;SPAN class=kwrd&gt;Sub&lt;/SPAN&gt; LayoutRoot_BindingValidationError(&lt;SPAN class=kwrd&gt;ByVal&lt;/SPAN&gt; sender &lt;SPAN class=kwrd&gt;As&lt;/SPAN&gt; System.&lt;SPAN class=kwrd&gt;Object&lt;/SPAN&gt;, &lt;BR&gt;&lt;SPAN class=kwrd&gt;ByVal&lt;/SPAN&gt; e &lt;SPAN class=kwrd&gt;As&lt;/SPAN&gt; System.Windows.Controls.ValidationErrorEventArgs)
        &lt;SPAN class=kwrd&gt;If&lt;/SPAN&gt; e.Action = ValidationErrorEventAction.Added &lt;SPAN class=kwrd&gt;Then&lt;/SPAN&gt;
            &lt;SPAN class=kwrd&gt;CType&lt;/SPAN&gt;(e.OriginalSource, TextBox).Background = _&lt;BR&gt;&lt;SPAN class=kwrd&gt;New&lt;/SPAN&gt; SolidColorBrush(Colors.Red)
            ToolTipService.SetToolTip(&lt;SPAN class=kwrd&gt;CType&lt;/SPAN&gt;(e.OriginalSource, TextBox), &lt;BR&gt;e.&lt;SPAN class=kwrd&gt;Error&lt;/SPAN&gt;.Exception.Message)
        &lt;SPAN class=kwrd&gt;Else&lt;/SPAN&gt;
            &lt;SPAN class=kwrd&gt;CType&lt;/SPAN&gt;(e.OriginalSource, TextBox).Background = _&lt;BR&gt;&lt;SPAN class=kwrd&gt;New&lt;/SPAN&gt; SolidColorBrush(Colors.White)
        &lt;SPAN class=kwrd&gt;End&lt;/SPAN&gt; &lt;SPAN class=kwrd&gt;If&lt;/SPAN&gt;
    &lt;SPAN class=kwrd&gt;End&lt;/SPAN&gt; &lt;SPAN class=kwrd&gt;Sub&lt;/SPAN&gt;

    &lt;SPAN class=kwrd&gt;Private&lt;/SPAN&gt; &lt;SPAN class=kwrd&gt;Sub&lt;/SPAN&gt; Button_Click(&lt;SPAN class=kwrd&gt;ByVal&lt;/SPAN&gt; sender &lt;SPAN class=kwrd&gt;As&lt;/SPAN&gt; System.&lt;SPAN class=kwrd&gt;Object&lt;/SPAN&gt;, &lt;BR&gt;&lt;SPAN class=kwrd&gt;ByVal&lt;/SPAN&gt; e &lt;SPAN class=kwrd&gt;As&lt;/SPAN&gt; System.Windows.RoutedEventArgs)
        &lt;SPAN class=kwrd&gt;Dim&lt;/SPAN&gt; o &lt;SPAN class=kwrd&gt;As&lt;/SPAN&gt; ServiceReference1.Customers = LayoutRoot.DataContext
        cust.UpdateObject(o)
        cust.BeginSaveChanges(&lt;SPAN class=kwrd&gt;AddressOf&lt;/SPAN&gt; saveFertig, o)

    &lt;SPAN class=kwrd&gt;End&lt;/SPAN&gt; &lt;SPAN class=kwrd&gt;Sub&lt;/SPAN&gt;
    &lt;SPAN class=kwrd&gt;Public&lt;/SPAN&gt; &lt;SPAN class=kwrd&gt;Sub&lt;/SPAN&gt; saveFertig(&lt;SPAN class=kwrd&gt;ByVal&lt;/SPAN&gt; result &lt;SPAN class=kwrd&gt;As&lt;/SPAN&gt; IAsyncResult)
        cust.EndSaveChanges(result)

    &lt;SPAN class=kwrd&gt;End&lt;/SPAN&gt; &lt;SPAN class=kwrd&gt;Sub&lt;/SPAN&gt;
&lt;SPAN class=kwrd&gt;End&lt;/SPAN&gt; &lt;SPAN class=kwrd&gt;Class&lt;/SPAN&gt;&lt;/PRE&gt;
&lt;STYLE type=text/css&gt;

.csharpcode, .csharpcode pre
{
	font-size: small;
	color: black;
	font-family: consolas, "Courier New", courier, monospace;
	background-color: #ffffff;
	/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt 
{
	background-color: #f4f4f4;
	width: 100%;
	margin: 0em;
}
.csharpcode .lnum { color: #606060; }&lt;/STYLE&gt;&lt;img src="http://weblogs.asp.net/aggbug.aspx?PostID=6750551" width="1" height="1"&gt;</content><author><name>preishuber</name><uri>http://weblogs.asp.net/members/preishuber.aspx</uri></author><category term=".NET" scheme="http://weblogs.asp.net/hpreishuber/archive/tags/.NET/default.aspx" /><category term="Silverlight" scheme="http://weblogs.asp.net/hpreishuber/archive/tags/Silverlight/default.aspx" /></entry><entry><title>Rownumber in Silverlight Datagrid or Listbox</title><link rel="alternate" type="text/html" href="http://weblogs.asp.net/hpreishuber/archive/2008/11/18/rownumber-in-silverlight-datagrid-or-listbox.aspx" /><id>http://weblogs.asp.net/hpreishuber/archive/2008/11/18/rownumber-in-silverlight-datagrid-or-listbox.aspx</id><published>2008-11-18T19:42:20Z</published><updated>2008-11-18T19:42:20Z</updated><content type="html">&lt;p&gt;My next sample uses a converter to show a line number within a datalist. I am not really satisfied with the solution, perhaps I will find in future a better way. But the concept is quite interesting and it works.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://weblogs.asp.net/blogs/hpreishuber/image_28BFCEAC.png"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="image" border="0" alt="image" src="http://weblogs.asp.net/blogs/hpreishuber/image_thumb_20C82C4A.png" width="134" height="77" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;First we need a TextBlock to display the row number. The content is controlled by databinding. Unique data (here [daten]) is needed as parameter for later converting.&amp;#160; &lt;/p&gt;  &lt;pre class="csharpcode"&gt;&lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;ListBox&lt;/span&gt; &lt;span class="attr"&gt;x:Name&lt;/span&gt;&lt;span class="kwrd"&gt;=&amp;quot;lstFields&amp;quot;&lt;/span&gt; &lt;span class="attr"&gt;SelectionChanged&lt;/span&gt;&lt;span class="kwrd"&gt;=&amp;quot;lstFields_SelectionChanged&amp;quot;&lt;/span&gt;   &lt;br /&gt;&lt;span class="attr"&gt;Height&lt;/span&gt;&lt;span class="kwrd"&gt;=&amp;quot;60&amp;quot;&lt;/span&gt; &lt;span class="attr"&gt;VerticalAlignment&lt;/span&gt;&lt;span class="kwrd"&gt;=&amp;quot;Top&amp;quot;&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;
      &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;ListBox.ItemTemplate&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;
            &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;DataTemplate&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;
            &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;StackPanel&lt;/span&gt; &lt;span class="attr"&gt;Orientation&lt;/span&gt;&lt;span class="kwrd"&gt;=&amp;quot;Horizontal&amp;quot;&lt;/span&gt; &lt;span class="attr"&gt;x:Name&lt;/span&gt;&lt;span class="kwrd"&gt;=&amp;quot;stack1&amp;quot;&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;
           &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;TextBlock&lt;/span&gt; &lt;span class="attr"&gt;Text&lt;/span&gt;&lt;span class="kwrd"&gt;=&amp;quot;{Binding daten, &lt;br /&gt;Converter={StaticResource rownumberconverter} }&amp;quot;&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;TextBlock&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;

The converter needs to be declared as resource.&lt;/pre&gt;

&lt;pre class="csharpcode"&gt;xmlns:c=&amp;quot;clr-namespace:SilverlightApplication1test&amp;quot;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;
    &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;UserControl.Resources&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;
        &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;c:rowNumberConverter&lt;/span&gt; &lt;span class="attr"&gt;x:Key&lt;/span&gt;&lt;span class="kwrd"&gt;=&amp;quot;rownumberconverter&amp;quot;&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;c:rowNumberConverter&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;
    &lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;UserControl.Resources&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;
&lt;style type="text/css"&gt;


.csharpcode, .csharpcode pre
{
	font-size: small;
	color: black;
	font-family: consolas, "Courier New", courier, monospace;
	background-color: #ffffff;
	/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt 
{
	background-color: #f4f4f4;
	width: 100%;
	margin: 0em;
}
.csharpcode .lnum { color: #606060; }&lt;/style&gt;

&lt;p&gt;The converter is implemented as class which uses a special interface. The trick is to get a reference to the original data. As you can see I get a reference to application.current and cast it to the class, which is named page17. Page17 is the xaml page. There I can find my listbox named lstfields and get all items. The items are from type listboxdaten and have a property [daten]. If you compare the property with the value from the converter you get the index of the datarow.&lt;/p&gt;

&lt;pre class="csharpcode"&gt;&lt;span class="kwrd"&gt;Public&lt;/span&gt; &lt;span class="kwrd"&gt;Class&lt;/span&gt; rowNumberConverter
    &lt;span class="kwrd"&gt;Implements&lt;/span&gt; IValueConverter
    &lt;span class="kwrd"&gt;Public&lt;/span&gt; &lt;span class="kwrd"&gt;Function&lt;/span&gt; Convert(&lt;span class="kwrd"&gt;ByVal&lt;/span&gt; value &lt;span class="kwrd"&gt;As&lt;/span&gt; &lt;span class="kwrd"&gt;Object&lt;/span&gt;, &lt;span class="kwrd"&gt;ByVal&lt;/span&gt; targetType &lt;span class="kwrd"&gt;As&lt;/span&gt; System.Type,
 &lt;span class="kwrd"&gt;ByVal&lt;/span&gt; parameter &lt;span class="kwrd"&gt;As&lt;/span&gt; &lt;span class="kwrd"&gt;Object&lt;/span&gt;, &lt;span class="kwrd"&gt;ByVal&lt;/span&gt; culture &lt;span class="kwrd"&gt;As&lt;/span&gt; System.Globalization.CultureInfo) &lt;span class="kwrd"&gt;As&lt;/span&gt; &lt;span class="kwrd"&gt;Object&lt;/span&gt; 
&lt;span class="kwrd"&gt;Implements&lt;/span&gt; System.Windows.Data.IValueConverter.Convert
        &lt;span class="kwrd"&gt;Dim&lt;/span&gt; mypage &lt;span class="kwrd"&gt;As&lt;/span&gt; page17 = &lt;span class="kwrd"&gt;CType&lt;/span&gt;(&lt;span class="kwrd"&gt;CType&lt;/span&gt;(Application.Current, App).RootVisual, page17)
        &lt;span class="kwrd"&gt;For&lt;/span&gt; i = 0 &lt;span class="kwrd"&gt;To&lt;/span&gt; mypage.lstFields.Items.Count - 1
            &lt;span class="kwrd"&gt;If&lt;/span&gt; &lt;span class="kwrd"&gt;CType&lt;/span&gt;(mypage.lstFields.Items(i), Listboxdaten).daten = value &lt;span class="kwrd"&gt;Then&lt;/span&gt;
                &lt;span class="kwrd"&gt;Return&lt;/span&gt; i + 1
            &lt;span class="kwrd"&gt;End&lt;/span&gt; &lt;span class="kwrd"&gt;If&lt;/span&gt;
        &lt;span class="kwrd"&gt;Next&lt;/span&gt;
        &lt;span class="kwrd"&gt;Return&lt;/span&gt; &lt;span class="str"&gt;&amp;quot;nan&amp;quot;&lt;/span&gt; &lt;span class="rem"&gt;'should never happen&lt;/span&gt;
    &lt;span class="kwrd"&gt;End&lt;/span&gt; &lt;span class="kwrd"&gt;Function&lt;/span&gt;

    &lt;span class="kwrd"&gt;Public&lt;/span&gt; &lt;span class="kwrd"&gt;Function&lt;/span&gt; ConvertBack(&lt;span class="kwrd"&gt;ByVal&lt;/span&gt; value &lt;span class="kwrd"&gt;As&lt;/span&gt; &lt;span class="kwrd"&gt;Object&lt;/span&gt;, &lt;span class="kwrd"&gt;ByVal&lt;/span&gt; targetType &lt;span class="kwrd"&gt;As&lt;/span&gt; System.Type, 
&lt;span class="kwrd"&gt;ByVal&lt;/span&gt; parameter &lt;span class="kwrd"&gt;As&lt;/span&gt; &lt;span class="kwrd"&gt;Object&lt;/span&gt;, &lt;span class="kwrd"&gt;ByVal&lt;/span&gt; culture &lt;span class="kwrd"&gt;As&lt;/span&gt; System.Globalization.CultureInfo) &lt;span class="kwrd"&gt;As&lt;/span&gt; &lt;span class="kwrd"&gt;Object&lt;/span&gt; 
&lt;span class="kwrd"&gt;Implements&lt;/span&gt; System.Windows.Data.IValueConverter.ConvertBack
        &lt;span class="kwrd"&gt;Throw&lt;/span&gt; &lt;span class="kwrd"&gt;New&lt;/span&gt; NotImplementedException()
    &lt;span class="kwrd"&gt;End&lt;/span&gt; &lt;span class="kwrd"&gt;Function&lt;/span&gt;
&lt;span class="kwrd"&gt;End&lt;/span&gt; Class&lt;/pre&gt;
&lt;style type="text/css"&gt;


.csharpcode, .csharpcode pre
{
	font-size: small;
	color: black;
	font-family: consolas, "Courier New", courier, monospace;
	background-color: #ffffff;
	/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt 
{
	background-color: #f4f4f4;
	width: 100%;
	margin: 0em;
}
.csharpcode .lnum { color: #606060; }&lt;/style&gt;&lt;style type="text/css"&gt;


.csharpcode, .csharpcode pre
{
	font-size: small;
	color: black;
	font-family: consolas, "Courier New", courier, monospace;
	background-color: #ffffff;
	/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt 
{
	background-color: #f4f4f4;
	width: 100%;
	margin: 0em;
}
.csharpcode .lnum { color: #606060; }&lt;/style&gt;&lt;img src="http://weblogs.asp.net/aggbug.aspx?PostID=6745498" width="1" height="1"&gt;</content><author><name>preishuber</name><uri>http://weblogs.asp.net/members/preishuber.aspx</uri></author><category term=".NET" scheme="http://weblogs.asp.net/hpreishuber/archive/tags/.NET/default.aspx" /><category term="Silverlight" scheme="http://weblogs.asp.net/hpreishuber/archive/tags/Silverlight/default.aspx" /></entry><entry><title>get ID inside a Silverlight Datagrid when Button clicked</title><link rel="alternate" type="text/html" href="http://weblogs.asp.net/hpreishuber/archive/2008/11/15/get-id-inside-a-silverlight-datagrid-when-button-clicked.aspx" /><id>http://weblogs.asp.net/hpreishuber/archive/2008/11/15/get-id-inside-a-silverlight-datagrid-when-button-clicked.aspx</id><published>2008-11-15T10:22:07Z</published><updated>2008-11-15T10:22:07Z</updated><content type="html">&lt;p&gt;This blog pots describes a datagrid and a encapsulated custom button for each row. I want to show two methods how to get information about the underlaying data of the row.&lt;/p&gt;  &lt;p&gt;I use a ado.net data service and a entity datamodel, which is not part of the article, to get the data. Database is good old northwind and table is customer. When use clicks on button messagebox comes up with some information about the row.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://weblogs.asp.net/blogs/hpreishuber/image_7D332C46.png"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="image" border="0" alt="image" src="http://weblogs.asp.net/blogs/hpreishuber/image_thumb_3EDA3C08.png" width="408" height="395" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;First the xaml code&lt;/p&gt;  &lt;pre class="csharpcode"&gt;&lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;Grid&lt;/span&gt; &lt;span class="attr"&gt;x:Name&lt;/span&gt;&lt;span class="kwrd"&gt;=&amp;quot;LayoutRoot&amp;quot;&lt;/span&gt; &lt;span class="attr"&gt;Background&lt;/span&gt;&lt;span class="kwrd"&gt;=&amp;quot;White&amp;quot;&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;
&lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;data:DataGrid&lt;/span&gt; &lt;span class="attr"&gt;x:Name&lt;/span&gt;&lt;span class="kwrd"&gt;=&amp;quot;DataGrid1&amp;quot;&lt;/span&gt; &lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;
            &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;data:DataGrid.Columns&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;
                &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;data:DataGridTemplateColumn&lt;/span&gt; &lt;span class="attr"&gt;Width&lt;/span&gt;&lt;span class="kwrd"&gt;=&amp;quot;100&amp;quot;&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;
                    &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;data:DataGridTemplateColumn.CellTemplate&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;
                        &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;DataTemplate&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;
                            &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;Button&lt;/span&gt; &lt;span class="attr"&gt;Content&lt;/span&gt;&lt;span class="kwrd"&gt;=&amp;quot;{Binding CustomerID}&amp;quot;&lt;/span&gt; &lt;span class="attr"&gt;Click&lt;/span&gt;&lt;span class="kwrd"&gt;=&amp;quot;Button_Click&amp;quot;&lt;/span&gt; &lt;span class="attr"&gt;Tag&lt;/span&gt;&lt;span class="kwrd"&gt;=&amp;quot;{Binding CustomerID}&amp;quot;&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;Button&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;
                        &lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;DataTemplate&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;
                    &lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;data:DataGridTemplateColumn.CellTemplate&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;
                &lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;data:DataGridTemplateColumn&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;
            &lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;data:DataGrid.Columns&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;
&lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;data:DataGrid&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;
&lt;style type="text/css"&gt;

.csharpcode, .csharpcode pre
{
	font-size: small;
	color: black;
	font-family: consolas, "Courier New", courier, monospace;
	background-color: #ffffff;
	/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt 
{
	background-color: #f4f4f4;
	width: 100%;
	margin: 0em;
}
.csharpcode .lnum { color: #606060; }&lt;/style&gt;

&lt;p&gt;The databinding to the &lt;strong&gt;tag&lt;/strong&gt; attribute is necessary for my first trick&lt;/p&gt;

&lt;pre class="csharpcode"&gt;&lt;span class="kwrd"&gt;Private&lt;/span&gt; &lt;span class="kwrd"&gt;Sub&lt;/span&gt; Button_Click(&lt;span class="kwrd"&gt;ByVal&lt;/span&gt; sender &lt;span class="kwrd"&gt;As&lt;/span&gt; System.&lt;span class="kwrd"&gt;Object&lt;/span&gt;, &lt;span class="kwrd"&gt;ByVal&lt;/span&gt; e &lt;span class="kwrd"&gt;As&lt;/span&gt; System.Windows.RoutedEventArgs)
        MessageBox.Show(&lt;span class="kwrd"&gt;CType&lt;/span&gt;(e.OriginalSource, Button).Tag)
&lt;span class="kwrd"&gt;End&lt;/span&gt; Sub&lt;/pre&gt;
&lt;style type="text/css"&gt;

.csharpcode, .csharpcode pre
{
	font-size: small;
	color: black;
	font-family: consolas, "Courier New", courier, monospace;
	background-color: #ffffff;
	/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt 
{
	background-color: #f4f4f4;
	width: 100%;
	margin: 0em;
}
.csharpcode .lnum { color: #606060; }&lt;/style&gt;

&lt;p&gt;Easy or? Do you like it more complex, than following code gives you the select row as number&lt;/p&gt;

&lt;pre class="csharpcode"&gt;&lt;span class="kwrd"&gt;Private&lt;/span&gt; &lt;span class="kwrd"&gt;Sub&lt;/span&gt; Button_Click(&lt;span class="kwrd"&gt;ByVal&lt;/span&gt; sender &lt;span class="kwrd"&gt;As&lt;/span&gt; System.&lt;span class="kwrd"&gt;Object&lt;/span&gt;, &lt;span class="kwrd"&gt;ByVal&lt;/span&gt; e &lt;span class="kwrd"&gt;As&lt;/span&gt; System.Windows.RoutedEventArgs)
        &lt;span class="kwrd"&gt;Dim&lt;/span&gt; datenliste &lt;span class="kwrd"&gt;As&lt;/span&gt; List(Of ServiceReference1.Customers)
        datenliste = DataGrid1.ItemsSource &lt;span class="rem"&gt;'automatischer cast&lt;/span&gt;
        &lt;span class="kwrd"&gt;Dim&lt;/span&gt; datenButton &lt;span class="kwrd"&gt;As&lt;/span&gt; &lt;span class="kwrd"&gt;Object&lt;/span&gt; = &lt;span class="kwrd"&gt;CType&lt;/span&gt;(e.OriginalSource, Button).DataContext()
        MessageBox.Show(datenliste.IndexOf(datenButton))
&lt;span class="kwrd"&gt;End&lt;/span&gt; Sub&lt;/pre&gt;
&lt;style type="text/css"&gt;

.csharpcode, .csharpcode pre
{
	font-size: small;
	color: black;
	font-family: consolas, "Courier New", courier, monospace;
	background-color: #ffffff;
	/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt 
{
	background-color: #f4f4f4;
	width: 100%;
	margin: 0em;
}
.csharpcode .lnum { color: #606060; }&lt;/style&gt;&lt;img src="http://weblogs.asp.net/aggbug.aspx?PostID=6738953" width="1" height="1"&gt;</content><author><name>preishuber</name><uri>http://weblogs.asp.net/members/preishuber.aspx</uri></author><category term=".NET" scheme="http://weblogs.asp.net/hpreishuber/archive/tags/.NET/default.aspx" /><category term="Silverlight" scheme="http://weblogs.asp.net/hpreishuber/archive/tags/Silverlight/default.aspx" /></entry></feed>