<?xml version="1.0" encoding="UTF-8" ?>
<?xml-stylesheet type="text/xsl" href="http://cs.vbcity.com/utility/FeedStylesheets/rss.xsl" media="screen"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:itunes="http://www.itunes.com/dtds/podcast-1.0.dtd"><channel><title>vbCity Blogs</title><link>http://cs.vbcity.com/blogs/</link><description>New (temp) place for vbCity Blogs</description><dc:language>en-US</dc:language><generator>CommunityServer 2008 (Build: 30417.1769)</generator><item><title>Visual Basic 2008 - Create a DataTable From Linq Query Results</title><link>http://cs.vbcity.com/blogs/mike-mcintyre/archive/2009/11/06/visual-basic-2008-create-a-datatable-from-linq-query-results.aspx</link><pubDate>Fri, 06 Nov 2009 15:40:00 GMT</pubDate><guid isPermaLink="false">921a0936-6df9-4a08-8006-68f3b1747f32:273</guid><dc:creator>Mike McIntyre</dc:creator><slash:comments>0</slash:comments><description>&lt;p&gt;Below is a class that contains a method that can create a DataTable object form Linq Query Results. I find the LINQToDataTable method really handy when I am creating Crystal reports. Crystal Reports love to report on DataTables.&lt;/p&gt;
&lt;p&gt;The Imports are essential to the LINQToDataTable method in the LinqUtilities class.&lt;/p&gt;
&lt;div style="FONT-FAMILY:Courier New;BACKGROUND:white;COLOR:black;FONT-SIZE:10pt;"&gt;
&lt;pre style="MARGIN:0px;PADDING-LEFT:30px;"&gt;&lt;span style="font-size:x-small;"&gt;&lt;span style="COLOR:blue;"&gt;Imports&lt;/span&gt; System.Data&lt;/span&gt;&lt;/pre&gt;
&lt;pre style="MARGIN:0px;PADDING-LEFT:30px;"&gt;&lt;span style="font-size:x-small;"&gt;&lt;span style="COLOR:blue;"&gt;Imports&lt;/span&gt; System.Linq&lt;/span&gt;&lt;/pre&gt;
&lt;pre style="MARGIN:0px;PADDING-LEFT:30px;"&gt;&lt;span style="font-size:x-small;"&gt;&lt;span style="COLOR:blue;"&gt;Imports&lt;/span&gt; System.Reflection&lt;/span&gt;&lt;/pre&gt;
&lt;pre style="MARGIN:0px;PADDING-LEFT:30px;"&gt;&lt;span style="font-size:x-small;"&gt;&lt;/span&gt; &lt;/pre&gt;
&lt;pre style="MARGIN:0px;PADDING-LEFT:30px;"&gt;&lt;span style="font-size:x-small;"&gt;&lt;span style="COLOR:blue;"&gt;Public&lt;/span&gt; &lt;span style="COLOR:blue;"&gt;Class&lt;/span&gt; LinqUtilities&lt;/span&gt;&lt;/pre&gt;
&lt;pre style="MARGIN:0px;PADDING-LEFT:30px;"&gt;&lt;span style="font-size:x-small;"&gt;    &lt;span style="COLOR:blue;"&gt;Friend&lt;/span&gt; &lt;span style="COLOR:blue;"&gt;Shared&lt;/span&gt; &lt;span style="COLOR:blue;"&gt;Function&lt;/span&gt; LINQToDataTable(&lt;span style="COLOR:blue;"&gt;Of&lt;/span&gt; T)(&lt;span style="COLOR:blue;"&gt;ByVal&lt;/span&gt; iEnumerableList &lt;span style="COLOR:blue;"&gt;As&lt;/span&gt; IEnumerable(&lt;span style="COLOR:blue;"&gt;Of&lt;/span&gt; T)) &lt;span style="COLOR:blue;"&gt;As&lt;/span&gt; DataTable&lt;/span&gt;&lt;/pre&gt;
&lt;pre style="MARGIN:0px;PADDING-LEFT:30px;"&gt;&lt;span style="font-size:x-small;"&gt;        &lt;span style="COLOR:blue;"&gt;Dim&lt;/span&gt; newDataTable &lt;span style="COLOR:blue;"&gt;As&lt;/span&gt; &lt;span style="COLOR:blue;"&gt;New&lt;/span&gt; DataTable()&lt;/span&gt;&lt;/pre&gt;
&lt;pre style="MARGIN:0px;PADDING-LEFT:30px;"&gt;&lt;span style="font-size:x-small;"&gt;        &lt;span style="COLOR:blue;"&gt;Dim&lt;/span&gt; thePropertyInfo &lt;span style="COLOR:blue;"&gt;As&lt;/span&gt; PropertyInfo() = &lt;span style="COLOR:blue;"&gt;Nothing&lt;/span&gt;&lt;/span&gt;&lt;/pre&gt;
&lt;pre style="MARGIN:0px;PADDING-LEFT:30px;"&gt;&lt;span style="font-size:x-small;"&gt;        &lt;span style="COLOR:blue;"&gt;If&lt;/span&gt; iEnumerableList &lt;span style="COLOR:blue;"&gt;Is&lt;/span&gt; &lt;span style="COLOR:blue;"&gt;Nothing&lt;/span&gt; &lt;span style="COLOR:blue;"&gt;Then&lt;/span&gt;&lt;/span&gt;&lt;/pre&gt;
&lt;pre style="MARGIN:0px;PADDING-LEFT:30px;"&gt;&lt;span style="font-size:x-small;"&gt;            &lt;span style="COLOR:blue;"&gt;Return&lt;/span&gt; newDataTable&lt;/span&gt;&lt;/pre&gt;
&lt;pre style="MARGIN:0px;PADDING-LEFT:30px;"&gt;&lt;span style="font-size:x-small;"&gt;        &lt;span style="COLOR:blue;"&gt;End&lt;/span&gt; &lt;span style="COLOR:blue;"&gt;If&lt;/span&gt;&lt;/span&gt;&lt;/pre&gt;
&lt;pre style="MARGIN:0px;PADDING-LEFT:30px;"&gt;&lt;span style="font-size:x-small;"&gt; &lt;/span&gt;&lt;/pre&gt;
&lt;pre style="MARGIN:0px;PADDING-LEFT:30px;"&gt;&lt;span style="font-size:x-small;"&gt;        &lt;span style="COLOR:blue;"&gt;For&lt;/span&gt; &lt;span style="COLOR:blue;"&gt;Each&lt;/span&gt; item &lt;span style="COLOR:blue;"&gt;As&lt;/span&gt; T &lt;span style="COLOR:blue;"&gt;In&lt;/span&gt; iEnumerableList&lt;/span&gt;&lt;/pre&gt;
&lt;pre style="MARGIN:0px;PADDING-LEFT:30px;"&gt;&lt;span style="font-size:x-small;"&gt;            &lt;span style="COLOR:blue;"&gt;If&lt;/span&gt; thePropertyInfo &lt;span style="COLOR:blue;"&gt;Is&lt;/span&gt; &lt;span style="COLOR:blue;"&gt;Nothing&lt;/span&gt; &lt;span style="COLOR:blue;"&gt;Then&lt;/span&gt;&lt;/span&gt;&lt;/pre&gt;
&lt;pre style="MARGIN:0px;PADDING-LEFT:30px;"&gt;&lt;span style="font-size:x-small;"&gt;                thePropertyInfo = (&lt;span style="COLOR:blue;"&gt;DirectCast&lt;/span&gt;(item.[GetType](), Type)).GetProperties()&lt;/span&gt;&lt;/pre&gt;
&lt;pre style="MARGIN:0px;PADDING-LEFT:30px;"&gt;&lt;span style="font-size:x-small;"&gt;                &lt;span style="COLOR:blue;"&gt;For&lt;/span&gt; &lt;span style="COLOR:blue;"&gt;Each&lt;/span&gt; propInfo &lt;span style="COLOR:blue;"&gt;As&lt;/span&gt; PropertyInfo &lt;span style="COLOR:blue;"&gt;In&lt;/span&gt; thePropertyInfo&lt;/span&gt;&lt;/pre&gt;
&lt;pre style="MARGIN:0px;PADDING-LEFT:30px;"&gt;&lt;span style="font-size:x-small;"&gt;                    &lt;span style="COLOR:blue;"&gt;Dim&lt;/span&gt; columnDataType &lt;span style="COLOR:blue;"&gt;As&lt;/span&gt; Type = propInfo.PropertyType&lt;/span&gt;&lt;/pre&gt;
&lt;pre style="MARGIN:0px;PADDING-LEFT:30px;"&gt;&lt;span style="font-size:x-small;"&gt;                    &lt;span style="COLOR:blue;"&gt;If&lt;/span&gt; (columnDataType.IsGenericType) &lt;span style="COLOR:blue;"&gt;AndAlso&lt;/span&gt; (columnDataType.GetGenericTypeDefinition() &lt;span style="COLOR:blue;"&gt;Is&lt;/span&gt; &lt;span style="COLOR:blue;"&gt;GetType&lt;/span&gt;(Nullable(&lt;span style="COLOR:blue;"&gt;Of&lt;/span&gt; ))) &lt;span style="COLOR:blue;"&gt;Then&lt;/span&gt;&lt;/span&gt;&lt;/pre&gt;
&lt;pre style="MARGIN:0px;PADDING-LEFT:30px;"&gt;&lt;span style="font-size:x-small;"&gt;                        columnDataType = columnDataType.GetGenericArguments()(0)&lt;/span&gt;&lt;/pre&gt;
&lt;pre style="MARGIN:0px;PADDING-LEFT:30px;"&gt;&lt;span style="font-size:x-small;"&gt;                    &lt;span style="COLOR:blue;"&gt;End&lt;/span&gt; &lt;span style="COLOR:blue;"&gt;If&lt;/span&gt;&lt;/span&gt;&lt;/pre&gt;
&lt;pre style="MARGIN:0px;PADDING-LEFT:30px;"&gt;&lt;span style="font-size:x-small;"&gt;                    newDataTable.Columns.Add(&lt;span style="COLOR:blue;"&gt;New&lt;/span&gt; DataColumn(propInfo.Name, columnDataType))&lt;/span&gt;&lt;/pre&gt;
&lt;pre style="MARGIN:0px;PADDING-LEFT:30px;"&gt;&lt;span style="font-size:x-small;"&gt;                &lt;span style="COLOR:blue;"&gt;Next&lt;/span&gt;&lt;/span&gt;&lt;/pre&gt;
&lt;pre style="MARGIN:0px;PADDING-LEFT:30px;"&gt;&lt;span style="font-size:x-small;"&gt;            &lt;span style="COLOR:blue;"&gt;End&lt;/span&gt; &lt;span style="COLOR:blue;"&gt;If&lt;/span&gt;&lt;/span&gt;&lt;/pre&gt;
&lt;pre style="MARGIN:0px;PADDING-LEFT:30px;"&gt;&lt;span style="font-size:x-small;"&gt; &lt;/span&gt;&lt;/pre&gt;
&lt;pre style="MARGIN:0px;PADDING-LEFT:30px;"&gt;&lt;span style="font-size:x-small;"&gt;            &lt;span style="COLOR:blue;"&gt;Dim&lt;/span&gt; dr &lt;span style="COLOR:blue;"&gt;As&lt;/span&gt; DataRow = newDataTable.NewRow()&lt;/span&gt;&lt;/pre&gt;
&lt;pre style="MARGIN:0px;PADDING-LEFT:30px;"&gt;&lt;span style="font-size:x-small;"&gt;            &lt;span style="COLOR:blue;"&gt;For&lt;/span&gt; &lt;span style="COLOR:blue;"&gt;Each&lt;/span&gt; pi &lt;span style="COLOR:blue;"&gt;As&lt;/span&gt; PropertyInfo &lt;span style="COLOR:blue;"&gt;In&lt;/span&gt; thePropertyInfo&lt;/span&gt;&lt;/pre&gt;
&lt;pre style="MARGIN:0px;PADDING-LEFT:30px;"&gt;&lt;span style="font-size:x-small;"&gt;                dr(pi.Name) = &lt;span style="COLOR:blue;"&gt;If&lt;/span&gt;(pi.GetValue(item, &lt;span style="COLOR:blue;"&gt;Nothing&lt;/span&gt;) &lt;span style="COLOR:blue;"&gt;Is&lt;/span&gt; &lt;span style="COLOR:blue;"&gt;Nothing&lt;/span&gt;, DBNull.Value, pi.GetValue(item, &lt;span style="COLOR:blue;"&gt;Nothing&lt;/span&gt;))&lt;/span&gt;&lt;/pre&gt;
&lt;pre style="MARGIN:0px;PADDING-LEFT:30px;"&gt;&lt;span style="font-size:x-small;"&gt;            &lt;span style="COLOR:blue;"&gt;Next&lt;/span&gt;&lt;/span&gt;&lt;/pre&gt;
&lt;pre style="MARGIN:0px;PADDING-LEFT:30px;"&gt;&lt;span style="font-size:x-small;"&gt; &lt;/span&gt;&lt;/pre&gt;
&lt;pre style="MARGIN:0px;PADDING-LEFT:30px;"&gt;&lt;span style="font-size:x-small;"&gt;            newDataTable.Rows.Add(dr)&lt;/span&gt;&lt;/pre&gt;
&lt;pre style="MARGIN:0px;PADDING-LEFT:30px;"&gt;&lt;span style="font-size:x-small;"&gt;        &lt;span style="COLOR:blue;"&gt;Next&lt;/span&gt;&lt;/span&gt;&lt;/pre&gt;
&lt;pre style="MARGIN:0px;PADDING-LEFT:30px;"&gt;&lt;span style="font-size:x-small;"&gt;        &lt;span style="COLOR:blue;"&gt;Return&lt;/span&gt; newDataTable&lt;/span&gt;&lt;/pre&gt;
&lt;pre style="MARGIN:0px;PADDING-LEFT:30px;"&gt;&lt;span style="font-size:x-small;"&gt;    &lt;span style="COLOR:blue;"&gt;End&lt;/span&gt; &lt;span style="COLOR:blue;"&gt;Function&lt;/span&gt;&lt;/span&gt;&lt;/pre&gt;
&lt;pre style="MARGIN:0px;PADDING-LEFT:30px;"&gt;&lt;span style="font-size:x-small;"&gt; &lt;/span&gt;&lt;/pre&gt;
&lt;pre style="MARGIN:0px;PADDING-LEFT:30px;"&gt;&lt;span style="font-size:x-small;"&gt;&lt;span style="COLOR:blue;"&gt;End&lt;/span&gt; &lt;span style="COLOR:blue;"&gt;Class&lt;/span&gt;&lt;/span&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;p&gt;Below is example code&amp;nbsp;that uses Linq to query for all the buttons on a Windows Forms form and calls the LINQToDataTable method to put the query results into a DataTable.&lt;/p&gt;
&lt;div style="font-family:Courier New;background:white;color:black;font-size:10pt;"&gt;
&lt;pre style="margin:0px;padding-left:30px;"&gt;&lt;span style="font-size:x-small;"&gt;&lt;span style="color:blue;"&gt;Dim&lt;/span&gt; newDataTable &lt;span style="color:blue;"&gt;As&lt;/span&gt; DataTable = _&lt;/span&gt;&lt;/pre&gt;
&lt;pre style="margin:0px;padding-left:30px;"&gt;&lt;span style="font-size:x-small;"&gt;        LinqUtilities.LINQToDataTable(&lt;span style="color:blue;"&gt;From&lt;/span&gt; btn &lt;span style="color:blue;"&gt;In&lt;/span&gt; &lt;span style="color:blue;"&gt;Me&lt;/span&gt;.Controls _&lt;/span&gt;&lt;/pre&gt;
&lt;pre style="margin:0px;padding-left:30px;"&gt;&lt;span style="font-size:x-small;"&gt;            &lt;span style="color:blue;"&gt;Where&lt;/span&gt; &lt;span style="color:blue;"&gt;TypeOf&lt;/span&gt; (btn) &lt;span style="color:blue;"&gt;Is&lt;/span&gt; Button &lt;span style="color:blue;"&gt;Select&lt;/span&gt; btn)&lt;/span&gt;&lt;/pre&gt;
&lt;pre style="margin:0px;"&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;p style="margin-top:0px;margin-bottom:0px;"&gt;&lt;span style="font-family:Verdana;"&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin-top:0px;margin-bottom:0px;"&gt;&lt;span style="font-family:Verdana;"&gt;Mike McIntyre&amp;#39;s &lt;span style="font-family:Verdana;"&gt;&lt;a target="_blank" href="http://cs.vbcity.com/blogs/mike-mcintyre/default.aspx" class="null"&gt;&lt;span style="color:#666666;"&gt;.Net Journal&lt;/span&gt;&lt;/a&gt;&lt;/span&gt;&lt;/span&gt; &lt;/p&gt;
&lt;p style="margin-top:0px;margin-bottom:0px;"&gt;&lt;span style="font-family:Verdana;"&gt;&lt;a target="_blank" href="http://www.getdotnetcode.com/" class="null"&gt;&lt;span style="color:#000000;"&gt;getdotnetcode.com&lt;/span&gt;&lt;/a&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://cs.vbcity.com/aggbug.aspx?PostID=273" width="1" height="1"&gt;</description><category domain="http://cs.vbcity.com/blogs/mike-mcintyre/archive/tags/Linq/default.aspx">Linq</category><category domain="http://cs.vbcity.com/blogs/mike-mcintyre/archive/tags/DataTable/default.aspx">DataTable</category></item><item><title>Controlling TreeView Item Visibility</title><link>http://cs.vbcity.com/blogs/xtab/archive/2009/11/06/controlling-treeview-item-visibility.aspx</link><pubDate>Fri, 06 Nov 2009 00:37:00 GMT</pubDate><guid isPermaLink="false">921a0936-6df9-4a08-8006-68f3b1747f32:269</guid><dc:creator>XTab</dc:creator><slash:comments>0</slash:comments><description>&lt;p&gt;&lt;span style="font-family:Calibri;"&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;An interesting question came up&amp;nbsp;recently, where someone wanted to have a TreeView in which: &lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Each TreeViewItem consisted of two separate lines of content &lt;/li&gt;
&lt;li&gt;but the second line may be hidden, depending on its content.&amp;nbsp;&amp;nbsp;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;This was actually a Windows Forms question, but I wondered if this would be a good candidate for harnessing the graphical power of WPF to solve a tough WinForms problem. My idea was to create a WPF UserControl that had the features described above and then host this User Control in an ElementHost in the Windows Form.&lt;/p&gt;
&lt;p&gt;It seemed like a reasonable proposition and here&amp;#39;s how I went about it.&lt;/p&gt;
&lt;p&gt;&lt;span style="text-decoration:underline;"&gt;Data Source&lt;/span&gt;&lt;br /&gt;First of all I need some data, so will use a simple Person class.&amp;nbsp;&amp;nbsp;&lt;/p&gt;
&lt;div style="font-family:Courier New;font-size:10pt;color:black;background:white;"&gt;
&lt;p style="margin:0px;"&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style="margin:0px;"&gt;&lt;span style="color:#0000ff;"&gt;Imports&lt;/span&gt; System.ComponentModel&lt;/p&gt;
&lt;p style="margin:0px;"&gt;&lt;span style="color:#0000ff;"&gt;Imports&lt;/span&gt; System.Collections.ObjectModel&lt;/p&gt;
&lt;p style="margin:0px;"&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style="margin:0px;"&gt;&lt;span style="color:#0000ff;"&gt;Public&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;Class&lt;/span&gt; Person&lt;/p&gt;
&lt;p style="margin:0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color:#0000ff;"&gt;Implements&lt;/span&gt; INotifyPropertyChanged&lt;/p&gt;
&lt;p style="margin:0px;"&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style="margin:0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color:#0000ff;"&gt;Sub&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;New&lt;/span&gt;(&lt;span style="color:#0000ff;"&gt;ByVal&lt;/span&gt; personname &lt;span style="color:#0000ff;"&gt;As&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;String&lt;/span&gt;, &lt;span style="color:#0000ff;"&gt;ByVal&lt;/span&gt; personstatus &lt;span style="color:#0000ff;"&gt;As&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;String&lt;/span&gt;, &lt;span style="color:#0000ff;"&gt;ByVal&lt;/span&gt; personcategory &lt;span style="color:#0000ff;"&gt;As&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;String&lt;/span&gt;)&lt;/p&gt;
&lt;p style="margin:0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color:#0000ff;"&gt;Me&lt;/span&gt;.FullName = personname&lt;/p&gt;
&lt;p style="margin:0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color:#0000ff;"&gt;Me&lt;/span&gt;.Status = personstatus&lt;/p&gt;
&lt;p style="margin:0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color:#0000ff;"&gt;Me&lt;/span&gt;.Category = personcategory&lt;/p&gt;
&lt;p style="margin:0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color:#0000ff;"&gt;End&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;Sub&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin:0px;"&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style="margin:0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color:#0000ff;"&gt;Private&lt;/span&gt; _name &lt;span style="color:#0000ff;"&gt;As&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;String&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin:0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color:#0000ff;"&gt;Public&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;Property&lt;/span&gt; FullName() &lt;span style="color:#0000ff;"&gt;As&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;String&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin:0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color:#0000ff;"&gt;Get&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin:0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color:#0000ff;"&gt;Return&lt;/span&gt; _name&lt;/p&gt;
&lt;p style="margin:0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color:#0000ff;"&gt;End&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;Get&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin:0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color:#0000ff;"&gt;Set&lt;/span&gt;(&lt;span style="color:#0000ff;"&gt;ByVal&lt;/span&gt; value &lt;span style="color:#0000ff;"&gt;As&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;String&lt;/span&gt;)&lt;/p&gt;
&lt;p style="margin:0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; _name = value&lt;/p&gt;
&lt;p style="margin:0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; OnPropertyChanged(&lt;span style="color:#0000ff;"&gt;New&lt;/span&gt; PropertyChangedEventArgs(&lt;span style="color:#a31515;"&gt;&amp;quot;FullName&amp;quot;&lt;/span&gt;))&lt;/p&gt;
&lt;p style="margin:0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color:#0000ff;"&gt;End&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;Set&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin:0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color:#0000ff;"&gt;End&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;Property&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin:0px;"&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style="margin:0px;"&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style="margin:0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color:#0000ff;"&gt;Private&lt;/span&gt; _status &lt;span style="color:#0000ff;"&gt;As&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;String&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin:0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color:#0000ff;"&gt;Public&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;Property&lt;/span&gt; Status() &lt;span style="color:#0000ff;"&gt;As&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;String&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin:0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color:#0000ff;"&gt;Get&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin:0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color:#0000ff;"&gt;Return&lt;/span&gt; _status&lt;/p&gt;
&lt;p style="margin:0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color:#0000ff;"&gt;End&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;Get&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin:0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color:#0000ff;"&gt;Set&lt;/span&gt;(&lt;span style="color:#0000ff;"&gt;ByVal&lt;/span&gt; value &lt;span style="color:#0000ff;"&gt;As&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;String&lt;/span&gt;)&lt;/p&gt;
&lt;p style="margin:0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; _status = value&lt;/p&gt;
&lt;p style="margin:0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; OnPropertyChanged(&lt;span style="color:#0000ff;"&gt;New&lt;/span&gt; PropertyChangedEventArgs(&lt;span style="color:#a31515;"&gt;&amp;quot;Status&amp;quot;&lt;/span&gt;))&lt;/p&gt;
&lt;p style="margin:0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color:#0000ff;"&gt;End&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;Set&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin:0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color:#0000ff;"&gt;End&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;Property&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin:0px;"&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style="margin:0px;"&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style="margin:0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color:#0000ff;"&gt;Private&lt;/span&gt; _Category &lt;span style="color:#0000ff;"&gt;As&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;String&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin:0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color:#0000ff;"&gt;Public&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;Property&lt;/span&gt; Category() &lt;span style="color:#0000ff;"&gt;As&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;String&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin:0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color:#0000ff;"&gt;Get&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin:0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color:#0000ff;"&gt;Return&lt;/span&gt; _Category&lt;/p&gt;
&lt;p style="margin:0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color:#0000ff;"&gt;End&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;Get&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin:0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color:#0000ff;"&gt;Set&lt;/span&gt;(&lt;span style="color:#0000ff;"&gt;ByVal&lt;/span&gt; value &lt;span style="color:#0000ff;"&gt;As&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;String&lt;/span&gt;)&lt;/p&gt;
&lt;p style="margin:0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; _Category = value&lt;/p&gt;
&lt;p style="margin:0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; OnPropertyChanged(&lt;span style="color:#0000ff;"&gt;New&lt;/span&gt; PropertyChangedEventArgs(&lt;span style="color:#a31515;"&gt;&amp;quot;Category&amp;quot;&lt;/span&gt;))&lt;/p&gt;
&lt;p style="margin:0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color:#0000ff;"&gt;End&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;Set&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin:0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color:#0000ff;"&gt;End&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;Property&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin:0px;"&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style="margin:0px;"&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style="margin:0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color:#0000ff;"&gt;Public&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;Sub&lt;/span&gt; OnPropertyChanged(&lt;span style="color:#0000ff;"&gt;ByVal&lt;/span&gt; e &lt;span style="color:#0000ff;"&gt;As&lt;/span&gt; PropertyChangedEventArgs)&lt;/p&gt;
&lt;p style="margin:0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color:#0000ff;"&gt;If&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;Not&lt;/span&gt; PropertyChangedEvent &lt;span style="color:#0000ff;"&gt;Is&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;Nothing&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;Then&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin:0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color:#0000ff;"&gt;RaiseEvent&lt;/span&gt; PropertyChanged(&lt;span style="color:#0000ff;"&gt;Me&lt;/span&gt;, e)&lt;/p&gt;
&lt;p style="margin:0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color:#0000ff;"&gt;End&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;If&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin:0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color:#0000ff;"&gt;End&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;Sub&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin:0px;"&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style="margin:0px;"&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style="margin:0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color:#0000ff;"&gt;Public&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;Event&lt;/span&gt; PropertyChanged(&lt;span style="color:#0000ff;"&gt;ByVal&lt;/span&gt; sender &lt;span style="color:#0000ff;"&gt;As&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;Object&lt;/span&gt;, &lt;span style="color:#0000ff;"&gt;ByVal&lt;/span&gt; e &lt;span style="color:#0000ff;"&gt;As&lt;/span&gt; System.ComponentModel.PropertyChangedEventArgs) &lt;span style="color:#0000ff;"&gt;Implements&lt;/span&gt; System.ComponentModel.INotifyPropertyChanged.PropertyChanged&lt;/p&gt;
&lt;p style="margin:0px;"&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style="margin:0px;"&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style="margin:0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color:#0000ff;"&gt;Public&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;Shared&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;Function&lt;/span&gt; GetPersons() &lt;span style="color:#0000ff;"&gt;As&lt;/span&gt; List(&lt;span style="color:#0000ff;"&gt;Of&lt;/span&gt; Person)&lt;/p&gt;
&lt;p style="margin:0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color:#0000ff;"&gt;Dim&lt;/span&gt; GP &lt;span style="color:#0000ff;"&gt;As&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;New&lt;/span&gt; List(&lt;span style="color:#0000ff;"&gt;Of&lt;/span&gt; Person)&lt;/p&gt;
&lt;p style="margin:0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; GP.Add(&lt;span style="color:#0000ff;"&gt;New&lt;/span&gt; Person(&lt;span style="color:#a31515;"&gt;&amp;quot;Ged Mead&amp;quot;&lt;/span&gt;, &lt;span style="color:#a31515;"&gt;&amp;quot;Busy&amp;quot;&lt;/span&gt;, &lt;span style="color:#a31515;"&gt;&amp;quot;VB City&amp;quot;&lt;/span&gt;))&lt;/p&gt;
&lt;p style="margin:0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; GP.Add(&lt;span style="color:#0000ff;"&gt;New&lt;/span&gt; Person(&lt;span style="color:#a31515;"&gt;&amp;quot;Joe Brown&amp;quot;&lt;/span&gt;, &lt;span style="color:#a31515;"&gt;&amp;quot;On Site&amp;quot;&lt;/span&gt;, &lt;span style="color:#a31515;"&gt;&amp;quot;Work Colleagues&amp;quot;&lt;/span&gt;))&lt;/p&gt;
&lt;p style="margin:0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; GP.Add(&lt;span style="color:#0000ff;"&gt;New&lt;/span&gt; Person(&lt;span style="color:#a31515;"&gt;&amp;quot;Serge Baliansky&amp;quot;&lt;/span&gt;, &lt;span style="color:#a31515;"&gt;&amp;quot;North Office&amp;quot;&lt;/span&gt;, &lt;span style="color:#a31515;"&gt;&amp;quot;VB City&amp;quot;&lt;/span&gt;))&lt;/p&gt;
&lt;p style="margin:0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; GP.Add(&lt;span style="color:#0000ff;"&gt;New&lt;/span&gt; Person(&lt;span style="color:#a31515;"&gt;&amp;quot;Fran Pickman&amp;quot;&lt;/span&gt;, &lt;span style="color:#a31515;"&gt;&amp;quot;East Centre&amp;quot;&lt;/span&gt;, &lt;span style="color:#a31515;"&gt;&amp;quot;Family&amp;quot;&lt;/span&gt;))&lt;/p&gt;
&lt;p style="margin:0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; GP.Add(&lt;span style="color:#0000ff;"&gt;New&lt;/span&gt; Person(&lt;span style="color:#a31515;"&gt;&amp;quot;Elaine Jones&amp;quot;&lt;/span&gt;, &lt;span style="color:#a31515;"&gt;&amp;quot;Not Available&amp;quot;&lt;/span&gt;, &lt;span style="color:#a31515;"&gt;&amp;quot;Work Colleagues&amp;quot;&lt;/span&gt;))&lt;/p&gt;
&lt;p style="margin:0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; GP.Add(&lt;span style="color:#0000ff;"&gt;New&lt;/span&gt; Person(&lt;span style="color:#a31515;"&gt;&amp;quot;Matt Bianca&amp;quot;&lt;/span&gt;, &lt;span style="color:#a31515;"&gt;&amp;quot;South Office&amp;quot;&lt;/span&gt;, &lt;span style="color:#a31515;"&gt;&amp;quot;VB City&amp;quot;&lt;/span&gt;))&lt;/p&gt;
&lt;p style="margin:0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color:#0000ff;"&gt;Return&lt;/span&gt; GP&lt;/p&gt;
&lt;p style="margin:0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color:#0000ff;"&gt;End&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;Function&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin:0px;"&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style="margin:0px;"&gt;&lt;span style="color:#0000ff;"&gt;End&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;Class&lt;/span&gt;&lt;/p&gt;
&lt;/div&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;As you see, this class implements INotifyPropertyChanged, so that changes to instance properties can be caught and any appropriate action taken as a result. I also included a basic method to generate some dummy data.&lt;/p&gt;
&lt;p&gt;&lt;span style="text-decoration:underline;"&gt;The Basic TreeView&lt;/span&gt;&lt;br /&gt;The TreeView will be a WPF UserControl, so it is necessary to create this inside the Windows Forms project. Use the Project &amp;gt; Add New Item menu for this, then select WPF from the selection window that appears and name the WPF UserControl:&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;img src="http://www.xtabvbcity.plus.com/Blogs/HostedTreeView01.png" alt="" /&gt;&lt;/p&gt;
&lt;p&gt;In the code-behind, you create a DataContext which will be the source of the data that is used to populate the TreeView:&lt;/p&gt;
&lt;div style="font-family:Courier New;font-size:10pt;color:black;background:white;"&gt;
&lt;p style="margin:0px;"&gt;&lt;span style="color:#0000ff;"&gt;Partial&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;Public&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;Class&lt;/span&gt; TwoLineTreeView&lt;/p&gt;
&lt;p style="margin:0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color:#0000ff;"&gt;Dim&lt;/span&gt; Contacts &lt;span style="color:#0000ff;"&gt;As&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;New&lt;/span&gt; List(&lt;span style="color:#0000ff;"&gt;Of&lt;/span&gt; Person)&lt;/p&gt;
&lt;p style="margin:0px;"&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style="margin:0px;"&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style="margin:0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color:#0000ff;"&gt;Private&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;Sub&lt;/span&gt; TwoLineTreeView_Loaded(&lt;span style="color:#0000ff;"&gt;ByVal&lt;/span&gt; sender &lt;span style="color:#0000ff;"&gt;As&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;Object&lt;/span&gt;, &lt;span style="color:#0000ff;"&gt;ByVal&lt;/span&gt; e &lt;span style="color:#0000ff;"&gt;As&lt;/span&gt; System.Windows.RoutedEventArgs) &lt;span style="color:#0000ff;"&gt;Handles&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;Me&lt;/span&gt;.Loaded&lt;/p&gt;
&lt;p style="margin:0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; Contacts = Person.GetPersons&lt;/p&gt;
&lt;p style="margin:0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color:#0000ff;"&gt;Me&lt;/span&gt;.DataContext = Contacts&lt;/p&gt;
&lt;p style="margin:0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color:#0000ff;"&gt;End&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;Sub&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin:0px;"&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style="margin:0px;"&gt;&lt;span style="color:#0000ff;"&gt;End&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;Class&lt;/span&gt;&amp;nbsp;&lt;/p&gt;
&lt;/div&gt;
&lt;p&gt;An easy way to package up the two line content display is to use two TextBlocks inside a StackPanel. These would all be stored in a DataTemplate that the TreeView will use for its ItemTemplate property. Here&amp;#39;s the first pass at the DataTemplate which I have placed in the Resources section of the UserControl named TwoLineTreeView.&amp;nbsp;&lt;/p&gt;
&lt;div style="font-family:Courier New;font-size:10pt;color:black;background:white;"&gt;
&lt;p style="margin:0px;"&gt;&lt;span style="color:#a31515;"&gt;&amp;nbsp; &lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#a31515;"&gt;UserControl.Resources&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&amp;gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin:0px;"&gt;&lt;span style="color:#a31515;"&gt;&amp;nbsp; &amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#a31515;"&gt;DataTemplate&lt;/span&gt;&lt;span style="color:#ff0000;"&gt; x&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;:&lt;/span&gt;&lt;span style="color:#ff0000;"&gt;Key&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&amp;quot;TVVis&amp;quot; &amp;gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin:0px;"&gt;&lt;span style="color:#a31515;"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#a31515;"&gt;TreeViewItem&lt;/span&gt;&lt;span style="color:#ff0000;"&gt; IsExpanded&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&amp;quot;True&amp;quot;&amp;gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin:0px;"&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style="margin:0px;"&gt;&lt;span style="color:#a31515;"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#a31515;"&gt;StackPanel&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&amp;gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin:0px;"&gt;&lt;span style="color:#a31515;"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#a31515;"&gt;TextBlock&lt;/span&gt;&lt;span style="color:#ff0000;"&gt; Text&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&amp;quot;{&lt;/span&gt;&lt;span style="color:#a31515;"&gt;Binding&lt;/span&gt;&lt;span style="color:#ff0000;"&gt; Path&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=FullName}&amp;quot;&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin:0px;"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span style="color:#ff0000;"&gt;Margin&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&amp;quot;2,0,0,1&amp;quot;&amp;gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#a31515;"&gt;TextBlock&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&amp;gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin:0px;"&gt;&lt;span style="color:#a31515;"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#a31515;"&gt;TextBlock&lt;/span&gt;&lt;span style="color:#ff0000;"&gt; Text&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&amp;quot;{&lt;/span&gt;&lt;span style="color:#a31515;"&gt;Binding&lt;/span&gt;&lt;span style="color:#ff0000;"&gt; Path&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=Status}&amp;quot;&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin:0px;"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span style="color:#ff0000;"&gt;Margin&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&amp;quot;8,3,2,2&amp;quot;&amp;gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#a31515;"&gt;TextBlock&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&amp;gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin:0px;"&gt;&lt;span style="color:#a31515;"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#a31515;"&gt;StackPanel&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&amp;gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin:0px;"&gt;&lt;span style="color:#a31515;"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#a31515;"&gt;TreeViewItem&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&amp;gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin:0px;"&gt;&lt;span style="color:#a31515;"&gt;&amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#a31515;"&gt;DataTemplate&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&amp;gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin:0px;"&gt;&lt;span style="color:#a31515;"&gt;&amp;nbsp; &lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#a31515;"&gt;UserControl.Resources&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&amp;gt;&lt;/span&gt;&amp;nbsp;&lt;/p&gt;
&lt;/div&gt;
&lt;p&gt;The first TextBlock binds to the Person&amp;#39;s name and the second one binds to their Status.&lt;/p&gt;
&lt;p&gt;We can test this early stage by adding a TreeView control to the UserControl:&amp;nbsp;&lt;/p&gt;
&lt;div style="font-family:Courier New;font-size:10pt;color:black;background:white;"&gt;
&lt;p style="margin:0px;"&gt;&lt;span style="color:#a31515;"&gt;&amp;nbsp; &lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#a31515;"&gt;Grid&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&amp;gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin:0px;"&gt;&lt;span style="color:#a31515;"&gt;&amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#a31515;"&gt;TreeView&lt;/span&gt;&lt;span style="color:#ff0000;"&gt; ItemsSource&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&amp;quot;{&lt;/span&gt;&lt;span style="color:#a31515;"&gt;Binding&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;}&amp;quot;&lt;/span&gt; &lt;/p&gt;
&lt;p style="margin:0px;"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;nbsp; &lt;span style="color:#ff0000;"&gt;ItemTemplate&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&amp;quot;{&lt;/span&gt;&lt;span style="color:#a31515;"&gt;StaticResource&lt;/span&gt;&lt;span style="color:#ff0000;"&gt; TVVis&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;}&amp;quot;&lt;/span&gt;&amp;nbsp;&amp;nbsp; &lt;span style="color:#0000ff;"&gt;&amp;gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin:0px;"&gt;&lt;span style="color:#a31515;"&gt;&amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#a31515;"&gt;TreeView&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&amp;gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin:0px;"&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style="margin:0px;"&gt;&lt;span style="color:#a31515;"&gt;&amp;nbsp; &lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#a31515;"&gt;Grid&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&amp;gt;&lt;/span&gt;&amp;nbsp;&lt;/p&gt;
&lt;/div&gt;
&lt;p&gt;The Grid is inserted in the UserControl by default and although we don&amp;#39;t really need it in this example there&amp;#39;s no great value in deleting it.&lt;/p&gt;
&lt;p&gt;If you now move to the Windows Form, you can add an ElementHost and populate it with this data bound user control. You can either find the ElementHost control in the Toolbox and drag an instance of it on to the surface of the form. If it hasn&amp;#39;t been added to the Toolbox (and as it is a Windows Forms project it doesn&amp;#39;t always appear by default) you can simply find the UserControl itself in the Toolbox and drag this on to the Form. &lt;/p&gt;
&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;img src="http://www.xtabvbcity.plus.com/Blogs/HostedTreeView02.png" alt="" /&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;When you do so, an ElementHost will be created for you on the Form and will automatically offer you the TwoLineTreeView user control as the Child of that ElementHost. Run the project and you will see:&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;img src="http://www.xtabvbcity.plus.com/Blogs/HostedTreeView03.png" alt="" /&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="text-decoration:underline;"&gt;Enabling and Disabling Visibility of the Second TextBlock&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;The easiest way of hiding or showing the second item of data (the status of the Person) is to use a ValueConverter. I&amp;#39;ve written several blogs describing the use of these and you can check them out if you need more detail on how they work. An introduction to a simple ValueConverter is covered &lt;a href="http://cs.vbcity.com/blogs/xtab/archive/2009/09/20/using-a-valueconverter-in-wpf.aspx"&gt;here&lt;/a&gt; and a more complex verion &lt;a href="http://cs.vbcity.com/blogs/xtab/archive/2009/09/20/more-complex-conversions-with-the-wpf-multibinding-converter.aspx"&gt;here&lt;/a&gt; and &lt;a href="http://cs.vbcity.com/blogs/xtab/archive/2009/09/23/wpf-valueconverter-using-enumeration-and-image-paths.aspx"&gt;here&lt;/a&gt;. &lt;/p&gt;
&lt;p&gt;Here is the Converter class used in this project:&amp;nbsp;&lt;/p&gt;
&lt;div style="font-family:Courier New;font-size:10pt;color:black;background:white;"&gt;
&lt;p style="margin:0px;"&gt;&lt;span style="color:#0000ff;"&gt;Imports&lt;/span&gt; System.Windows.Data&lt;/p&gt;
&lt;p style="margin:0px;"&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style="margin:0px;"&gt;&lt;span style="color:#0000ff;"&gt;Public&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;Class&lt;/span&gt; StatusToVisibilityConverter&lt;/p&gt;
&lt;p style="margin:0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color:#0000ff;"&gt;Implements&lt;/span&gt; IValueConverter&lt;/p&gt;
&lt;p style="margin:0px;"&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style="margin:0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color:#0000ff;"&gt;Public&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;Function&lt;/span&gt; Convert(&lt;span style="color:#0000ff;"&gt;ByVal&lt;/span&gt; value &lt;span style="color:#0000ff;"&gt;As&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;Object&lt;/span&gt;, &lt;span style="color:#0000ff;"&gt;ByVal&lt;/span&gt; targetType &lt;span style="color:#0000ff;"&gt;As&lt;/span&gt; System.Type, &lt;span style="color:#0000ff;"&gt;ByVal&lt;/span&gt; parameter &lt;span style="color:#0000ff;"&gt;As&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;Object&lt;/span&gt;, &lt;span style="color:#0000ff;"&gt;ByVal&lt;/span&gt; culture &lt;span style="color:#0000ff;"&gt;As&lt;/span&gt; System.Globalization.CultureInfo) &lt;span style="color:#0000ff;"&gt;As&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;Object&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;Implements&lt;/span&gt; System.Windows.Data.IValueConverter.Convert&lt;/p&gt;
&lt;p style="margin:0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color:#0000ff;"&gt;Select&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;Case&lt;/span&gt; value.ToString&lt;/p&gt;
&lt;p style="margin:0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color:#0000ff;"&gt;Case&lt;/span&gt; &lt;span style="color:#a31515;"&gt;&amp;quot;Busy&amp;quot;&lt;/span&gt;, &lt;span style="color:#a31515;"&gt;&amp;quot;Not Available&amp;quot;&lt;/span&gt;, &lt;span style="color:#a31515;"&gt;&amp;quot;En Route&amp;quot;&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin:0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color:#0000ff;"&gt;Return&lt;/span&gt; &lt;span style="color:#a31515;"&gt;&amp;quot;Collapsed&amp;quot;&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin:0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/p&gt;
&lt;p style="margin:0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color:#0000ff;"&gt;Case&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;Else&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin:0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color:#0000ff;"&gt;Return&lt;/span&gt; &lt;span style="color:#a31515;"&gt;&amp;quot;Visible&amp;quot;&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin:0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color:#0000ff;"&gt;End&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;Select&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin:0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color:#0000ff;"&gt;End&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;Function&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin:0px;"&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style="margin:0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color:#0000ff;"&gt;Public&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;Function&lt;/span&gt; ConvertBack(&lt;span style="color:#0000ff;"&gt;ByVal&lt;/span&gt; value &lt;span style="color:#0000ff;"&gt;As&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;Object&lt;/span&gt;, &lt;span style="color:#0000ff;"&gt;ByVal&lt;/span&gt; targetType &lt;span style="color:#0000ff;"&gt;As&lt;/span&gt; System.Type, &lt;span style="color:#0000ff;"&gt;ByVal&lt;/span&gt; parameter &lt;span style="color:#0000ff;"&gt;As&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;Object&lt;/span&gt;, &lt;span style="color:#0000ff;"&gt;ByVal&lt;/span&gt; culture &lt;span style="color:#0000ff;"&gt;As&lt;/span&gt; System.Globalization.CultureInfo) &lt;span style="color:#0000ff;"&gt;As&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;Object&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;Implements&lt;/span&gt; System.Windows.Data.IValueConverter.ConvertBack&lt;/p&gt;
&lt;p style="margin:0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color:#0000ff;"&gt;Throw&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;New&lt;/span&gt; NotImplementedException()&lt;/p&gt;
&lt;p style="margin:0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color:#0000ff;"&gt;End&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;Function&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin:0px;"&gt;&lt;span style="color:#0000ff;"&gt;End&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;Class&lt;/span&gt;&amp;nbsp;&lt;/p&gt;
&lt;/div&gt;
&lt;p&gt;It tests the value of the Status property and if it finds it is set to Busy, Not Available or En Route it will not display the line. It will display it in all other cases.&lt;/p&gt;
&lt;p&gt;The UserControl requires a namespace mapping before we can use this class to create and use a converter in the XAML pane. &lt;/p&gt;
&lt;div style="font-family:Courier New;font-size:10pt;color:black;background:white;"&gt;
&lt;p style="margin:0px;"&gt;&amp;nbsp;&amp;nbsp; &lt;span style="color:#ff0000;"&gt;xmlns&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;:&lt;/span&gt;&lt;span style="color:#ff0000;"&gt;local&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&amp;quot;clr-namespace:HostedTreeView&amp;quot;&lt;/span&gt;&lt;/p&gt;
&lt;/div&gt;
&lt;p&gt;With that in place, a converter is created inside the UserControl&amp;#39;s Resources collection:&amp;nbsp;&lt;/p&gt;
&lt;div style="font-family:Courier New;font-size:10pt;color:black;background:white;"&gt;
&lt;p style="margin:0px;"&gt;&lt;span style="color:#a31515;"&gt;&amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#a31515;"&gt;local&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;:&lt;/span&gt;&lt;span style="color:#a31515;"&gt;StatusToVisibilityConverter&lt;/span&gt;&lt;span style="color:#ff0000;"&gt; x&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;:&lt;/span&gt;&lt;span style="color:#ff0000;"&gt;Key&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&amp;quot;StatusConverter&amp;quot; /&amp;gt;&lt;/span&gt;&lt;/p&gt;
&lt;/div&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;The final step is to use the converter in the markup for the second TextBlock, specifically to hide or show it based on the content. Here is the amended TextBlock markup:&amp;nbsp;&lt;/p&gt;
&lt;div style="font-family:Courier New;font-size:10pt;color:black;background:white;"&gt;
&lt;p style="margin:0px;"&gt;&lt;span style="color:#a31515;"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#a31515;"&gt;TextBlock&lt;/span&gt;&lt;span style="color:#ff0000;"&gt; Text&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&amp;quot;{&lt;/span&gt;&lt;span style="color:#a31515;"&gt;Binding&lt;/span&gt;&lt;span style="color:#ff0000;"&gt; Path&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=Status}&amp;quot;&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin:0px;"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;nbsp; &lt;span style="color:#ff0000;"&gt;Visibility&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&amp;quot;{&lt;/span&gt;&lt;span style="color:#a31515;"&gt;Binding&lt;/span&gt;&lt;span style="color:#ff0000;"&gt; Path&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=Status,&lt;/span&gt;&lt;span style="color:#ff0000;"&gt; Converter&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;={&lt;/span&gt;&lt;span style="color:#a31515;"&gt;StaticResource&lt;/span&gt;&lt;span style="color:#ff0000;"&gt; StatusConverter&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;}}&amp;quot;&lt;/span&gt;&amp;nbsp; &lt;/p&gt;
&lt;p style="margin:0px;"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;nbsp; &lt;span style="color:#ff0000;"&gt;Margin&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&amp;quot;8,3,2,2&amp;quot;&amp;gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#a31515;"&gt;TextBlock&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&amp;gt;&lt;/span&gt;&amp;nbsp;&lt;/p&gt;
&lt;/div&gt;
&lt;p&gt;Now when the project is run, the two Person instances that contain Busy or Not Available as their Status will not display the second line.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;img src="http://www.xtabvbcity.plus.com/Blogs/HostedTreeView04.png" alt="" /&gt;&lt;/p&gt;
&lt;p&gt;You can of course take this basic approach and use alternatives or weave a much more complex set of interconnections - perhaps replacing the Status text with another message altogether or totally hiding a Person and their Status&amp;nbsp;if their Status has a particular value. Or whatever other variation meets your needs.&amp;nbsp; They key task was to create a two line node in which you could control the visibility of the lines.&lt;/p&gt;
&lt;p&gt;You can download the project used in this blog &lt;a href="http://www.xtabvbcity.plus.com/Blogs/HostedTreeView.zip"&gt;from here&lt;/a&gt;.&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://cs.vbcity.com/aggbug.aspx?PostID=269" width="1" height="1"&gt;</description><category domain="http://cs.vbcity.com/blogs/xtab/archive/tags/XAML/default.aspx">XAML</category><category domain="http://cs.vbcity.com/blogs/xtab/archive/tags/WPF/default.aspx">WPF</category><category domain="http://cs.vbcity.com/blogs/xtab/archive/tags/Interop/default.aspx">Interop</category><category domain="http://cs.vbcity.com/blogs/xtab/archive/tags/Windows+Forms/default.aspx">Windows Forms</category><category domain="http://cs.vbcity.com/blogs/xtab/archive/tags/.NET/default.aspx">.NET</category><category domain="http://cs.vbcity.com/blogs/xtab/archive/tags/VB.NET/default.aspx">VB.NET</category><category domain="http://cs.vbcity.com/blogs/xtab/archive/tags/Visual+Basic.NET/default.aspx">Visual Basic.NET</category><category domain="http://cs.vbcity.com/blogs/xtab/archive/tags/Visual+Basic/default.aspx">Visual Basic</category><category domain="http://cs.vbcity.com/blogs/xtab/archive/tags/ElementHost/default.aspx">ElementHost</category><category domain="http://cs.vbcity.com/blogs/xtab/archive/tags/DataBinding/default.aspx">DataBinding</category><category domain="http://cs.vbcity.com/blogs/xtab/archive/tags/DataTemplate/default.aspx">DataTemplate</category><category domain="http://cs.vbcity.com/blogs/xtab/archive/tags/Visual+Basic+DataBinding/default.aspx">Visual Basic DataBinding</category><category domain="http://cs.vbcity.com/blogs/xtab/archive/tags/ValueConverter/default.aspx">ValueConverter</category><category domain="http://cs.vbcity.com/blogs/xtab/archive/tags/Visual+Basic+WPF/default.aspx">Visual Basic WPF</category><category domain="http://cs.vbcity.com/blogs/xtab/archive/tags/TreeView/default.aspx">TreeView</category></item><item><title>SQL Join Summary Query Example</title><link>http://cs.vbcity.com/blogs/mike-mcintyre/archive/2009/11/04/sql-join-summary-query-example.aspx</link><pubDate>Thu, 05 Nov 2009 02:57:00 GMT</pubDate><guid isPermaLink="false">921a0936-6df9-4a08-8006-68f3b1747f32:272</guid><dc:creator>Mike McIntyre</dc:creator><slash:comments>0</slash:comments><description>&lt;p&gt;Heres a short exmaple to get you thinking about how query results&amp;nbsp;can be joined to tables for purposes such as attaching summary data.&lt;/p&gt;
&lt;p&gt;The example below shows how a query that sums total sales for a product can be joined to a query that selects product ID and product name from the Products table in Microsoft&amp;#39;s Adventure Works sample database.&lt;/p&gt;
&lt;p style="PADDING-LEFT:30px;"&gt;SELECT&lt;br /&gt;PROD.ProductID,&lt;br /&gt;PROD.[Name],&lt;br /&gt;ISNULL(SALES.ProductSales,0) ProductSales&lt;br /&gt;FROM Production.Product PROD&lt;br /&gt;LEFT JOIN&lt;br /&gt;(&lt;br /&gt;SELECT ProductId, &lt;br /&gt;SUM(LineTotal) ProductSales &lt;br /&gt;FROM Sales.SalesOrderDetail SOD&lt;br /&gt;GROUP BY ProductID&lt;br /&gt;) SALES&lt;br /&gt;ON PROD.ProductID = SALES.ProductID&amp;nbsp;&lt;/p&gt;
&lt;p&gt;The SELECT query within the parentheses returns a result with two columns: 1) ProductID and 2) ProductSales.&lt;/p&gt;
&lt;p&gt;The query within parentheses&amp;nbsp;is assigned&amp;nbsp;the alias &amp;#39;SALES&amp;#39; which is used to construct the ON clause that joins SALES to the Product table.&lt;/p&gt;
&lt;p&gt;Because&amp;nbsp;the SALES query returns ProductID (SALES.ProductID)&amp;nbsp;it can be joined to PROD.ProductID.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style="margin-top:0px;margin-bottom:0px;"&gt;&lt;span style="font-family:Verdana;"&gt;Mike McIntyre&amp;#39;s &lt;span style="font-family:Verdana;"&gt;&lt;a target="_blank" href="http://cs.vbcity.com/blogs/mike-mcintyre/default.aspx" class="null"&gt;&lt;span style="color:#666666;"&gt;.Net Journal&lt;/span&gt;&lt;/a&gt;&lt;/span&gt;&lt;/span&gt; &lt;/p&gt;
&lt;p style="margin-top:0px;margin-bottom:0px;"&gt;&lt;span style="font-family:Verdana;"&gt;&lt;a target="_blank" href="http://www.getdotnetcode.com/" class="null"&gt;&lt;span style="color:#000000;"&gt;getdotnetcode.com&lt;/span&gt;&lt;/a&gt;&lt;/span&gt;&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://cs.vbcity.com/aggbug.aspx?PostID=272" width="1" height="1"&gt;</description><category domain="http://cs.vbcity.com/blogs/mike-mcintyre/archive/tags/join/default.aspx">join</category><category domain="http://cs.vbcity.com/blogs/mike-mcintyre/archive/tags/sql/default.aspx">sql</category><category domain="http://cs.vbcity.com/blogs/mike-mcintyre/archive/tags/Summary/default.aspx">Summary</category></item><item><title>Create and Use a Custom Command - Follow-Up</title><link>http://cs.vbcity.com/blogs/xtab/archive/2009/11/04/create-and-use-a-custom-command-follow-up.aspx</link><pubDate>Wed, 04 Nov 2009 01:09:00 GMT</pubDate><guid isPermaLink="false">921a0936-6df9-4a08-8006-68f3b1747f32:266</guid><dc:creator>XTab</dc:creator><slash:comments>0</slash:comments><description>&lt;p&gt;&lt;span style="font-family:Calibri;"&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;In &lt;a href="http://cs.vbcity.com/blogs/xtab/archive/2009/10/30/how-to-create-and-use-a-custom-command-in-wpf.aspx" class="null"&gt;this earlier blog&lt;/a&gt;, I explained how you can create and use a&amp;nbsp;Command to carry out a task based on a variety of user actions. These actions included key presses, mouse actions and key/mouse combinations, as well as clicking on WPF controls. At the time I said that if you didn&amp;#39;t want to have the Image move unless the right mouse button was clicked directly on the Image itself (as opposed to clicking anywhere in the Window or on its other children) then you could use Bubbling and Tunneling. When I came to test this theory, however, I couldn&amp;#39;t find an obvious way of achieving this. I &lt;i&gt;could&lt;/i&gt;&lt;i&gt;&lt;/i&gt; stop a right click on the Image working, but that was the exact opposite of what I was trying to do!&lt;/p&gt;
&lt;p&gt;Whether this failure is due to the way the Command infrastructure works or (more likely) my inability to grasp the finer nuances of routing, I&amp;#39;ve had to admit defeat - at least temporarily. So I thought I should at least post up a workaround for anyone who read that blog item and did want the right click to work only on the Image itself. &lt;/p&gt;
&lt;p&gt;The &amp;#39;fix&amp;#39;, such as it is, is to ditch the InputGesture for MouseAction.RightClick in the InputGestureCollection and use a standard event handler purely for the Image MouseDown event. &lt;/p&gt;
&lt;p&gt;So, the MoveItCommand code becomes:&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;div style="font-family:Courier New;font-size:10pt;color:black;background:white;"&gt;
&lt;p style="margin:0px;"&gt;&lt;span style="color:#0000ff;"&gt;Public&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;Class&lt;/span&gt; MoveItCommand2&lt;/p&gt;
&lt;p style="margin:0px;"&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style="margin:0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color:#0000ff;"&gt;Private&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;Shared&lt;/span&gt; _moveit &lt;span style="color:#0000ff;"&gt;As&lt;/span&gt; RoutedUICommand&lt;/p&gt;
&lt;p style="margin:0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color:#0000ff;"&gt;Public&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;Shared&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;ReadOnly&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;Property&lt;/span&gt; MoveIt() &lt;span style="color:#0000ff;"&gt;As&lt;/span&gt; RoutedUICommand&lt;/p&gt;
&lt;p style="margin:0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color:#0000ff;"&gt;Get&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin:0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color:#0000ff;"&gt;Return&lt;/span&gt; _moveit&lt;/p&gt;
&lt;p style="margin:0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color:#0000ff;"&gt;End&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;Get&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin:0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color:#0000ff;"&gt;End&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;Property&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin:0px;"&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style="margin:0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color:#0000ff;"&gt;Shared&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;Sub&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;New&lt;/span&gt;()&lt;/p&gt;
&lt;p style="margin:0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color:#008000;"&gt;&amp;#39;&amp;nbsp; Add keyboard and mouse gestures&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin:0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color:#0000ff;"&gt;Dim&lt;/span&gt; UserInputs &lt;span style="color:#0000ff;"&gt;As&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;New&lt;/span&gt; InputGestureCollection()&lt;/p&gt;
&lt;p style="margin:0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; UserInputs.Add(&lt;span style="color:#0000ff;"&gt;New&lt;/span&gt; KeyGesture(Key.M, ModifierKeys.Alt))&lt;/p&gt;
&lt;p style="margin:0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; UserInputs.Add(&lt;span style="color:#0000ff;"&gt;New&lt;/span&gt; KeyGesture(Key.F12, ModifierKeys.None))&lt;/p&gt;
&lt;p style="margin:0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color:#008000;"&gt;&amp;#39; UserInputs.Add(New MouseGesture(MouseAction.RightClick, ModifierKeys.None))&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin:0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; UserInputs.Add(&lt;span style="color:#0000ff;"&gt;New&lt;/span&gt; MouseGesture(MouseAction.LeftClick, ModifierKeys.Shift))&lt;/p&gt;
&lt;p style="margin:0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color:#008000;"&gt;&amp;#39;&amp;nbsp; Assign these gestures to the _moveit field (and thereby to the MoveIt property)&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin:0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; _moveit = &lt;span style="color:#0000ff;"&gt;New&lt;/span&gt; RoutedUICommand(&lt;span style="color:#a31515;"&gt;&amp;quot;Move Element&amp;quot;&lt;/span&gt;, &lt;span style="color:#a31515;"&gt;&amp;quot;Move&amp;quot;&lt;/span&gt;, &lt;span style="color:#0000ff;"&gt;GetType&lt;/span&gt;(MoveItCommand), UserInputs)&lt;/p&gt;
&lt;p style="margin:0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color:#0000ff;"&gt;End&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;Sub&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin:0px;"&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style="margin:0px;"&gt;&lt;span style="color:#0000ff;"&gt;End&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;Class&lt;/span&gt;&lt;/p&gt;
&lt;/div&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;You&amp;#39;ll notice that I&amp;#39;ve renamed the class to MoveItCommand2.&lt;/p&gt;
&lt;p&gt;The code behind for the Window now takes an event handler for the Image MouseDown:&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;div style="font-family:Courier New;font-size:10pt;color:black;background:white;"&gt;
&lt;p style="margin:0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color:#0000ff;"&gt;Private&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;Sub&lt;/span&gt; MoveableImage_MouseDown(&lt;span style="color:#0000ff;"&gt;ByVal&lt;/span&gt; sender &lt;span style="color:#0000ff;"&gt;As&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;Object&lt;/span&gt;, &lt;span style="color:#0000ff;"&gt;ByVal&lt;/span&gt; e &lt;span style="color:#0000ff;"&gt;As&lt;/span&gt; System.Windows.Input.MouseButtonEventArgs) &lt;span style="color:#0000ff;"&gt;Handles&lt;/span&gt; MoveableImage.MouseDown&lt;/p&gt;
&lt;p style="margin:0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color:#0000ff;"&gt;If&lt;/span&gt; e.ChangedButton = MouseButton.Right &lt;span style="color:#0000ff;"&gt;Then&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin:0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; CommandBinding_Executed(MoveableImage, &lt;span style="color:#0000ff;"&gt;Nothing&lt;/span&gt;)&lt;/p&gt;
&lt;p style="margin:0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color:#0000ff;"&gt;End&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;If&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin:0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color:#0000ff;"&gt;End&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;Sub&lt;/span&gt;&lt;/p&gt;
&lt;/div&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;The code in that event handler simply calls the execution code for the original Command (so at least we retain some semblance of coordination). &lt;/p&gt;
&lt;p&gt;Finally, the markup for the Image in the XAML Pane includes a pointer to the new MouseDown event handler: &lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;div style="font-family:Courier New;font-size:10pt;color:black;background:white;"&gt;
&lt;p style="margin:0px;"&gt;&lt;span style="color:#a31515;"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#a31515;"&gt;Image&lt;/span&gt;&lt;span style="color:#ff0000;"&gt; x&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;:&lt;/span&gt;&lt;span style="color:#ff0000;"&gt;Name&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&amp;quot;MoveableImage&amp;quot;&lt;/span&gt;&lt;span style="color:#ff0000;"&gt; Width&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&amp;quot;55&amp;quot;&lt;/span&gt;&lt;span style="color:#ff0000;"&gt; Source&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&amp;quot;questionmark2.jpg&amp;quot;&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin:0px;"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;nbsp; &lt;span style="color:#ff0000;"&gt;Canvas.Left&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&amp;quot;0&amp;quot;&lt;/span&gt;&lt;span style="color:#ff0000;"&gt; Canvas.Top&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&amp;quot;0&amp;quot;&lt;/span&gt; &lt;/p&gt;
&lt;p style="margin:0px;"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;nbsp; &lt;span style="color:#ff0000;"&gt;MouseDown&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&amp;quot;MoveableImage_MouseDown&amp;quot;&lt;/span&gt; &lt;/p&gt;
&lt;p style="margin:0px;"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;nbsp; &lt;span style="color:#0000ff;"&gt;/&amp;gt;&lt;/span&gt;&lt;/p&gt;
&lt;/div&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;To avoid confusion, I&amp;#39;ll show all the revised markup below, as all references to the Command now have &amp;#39;2&amp;#39; appended to them, and they are easy to miss!&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;div style="font-family:Courier New;font-size:10pt;color:black;background:white;"&gt;
&lt;p style="margin:0px;"&gt;&lt;span style="color:#0000ff;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#a31515;"&gt;Window&lt;/span&gt;&lt;span style="color:#ff0000;"&gt; x&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;:&lt;/span&gt;&lt;span style="color:#ff0000;"&gt;Class&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&amp;quot;Window4&amp;quot;&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin:0px;"&gt;&amp;nbsp;&lt;span style="color:#ff0000;"&gt; xmlns&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&amp;quot;http://schemas.microsoft.com/winfx/2006/xaml/presentation&amp;quot;&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin:0px;"&gt;&amp;nbsp;&amp;nbsp; &lt;span style="color:#ff0000;"&gt;xmlns&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;:&lt;/span&gt;&lt;span style="color:#ff0000;"&gt;x&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&amp;quot;http://schemas.microsoft.com/winfx/2006/xaml&amp;quot;&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin:0px;"&gt;&amp;nbsp;&amp;nbsp; &lt;span style="color:#ff0000;"&gt;xmlns&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;:&lt;/span&gt;&lt;span style="color:#ff0000;"&gt;local&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&amp;quot;clr-namespace:GetValue&amp;quot;&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin:0px;"&gt;&amp;nbsp;&amp;nbsp; &lt;span style="color:#ff0000;"&gt;Title&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&amp;quot;Right Mouse Test&amp;quot;&lt;/span&gt;&lt;span style="color:#ff0000;"&gt; Height&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&amp;quot;300&amp;quot;&lt;/span&gt;&lt;span style="color:#ff0000;"&gt; Width&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&amp;quot;300&amp;quot;&amp;gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin:0px;"&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style="margin:0px;"&gt;&lt;span style="color:#a31515;"&gt;&amp;nbsp; &lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#a31515;"&gt;Window.CommandBindings&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&amp;gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin:0px;"&gt;&lt;span style="color:#a31515;"&gt;&amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#a31515;"&gt;CommandBinding&lt;/span&gt;&lt;span style="color:#ff0000;"&gt; Command&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&amp;quot;local:MoveItCommand2.MoveIt&amp;quot;&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin:0px;"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;nbsp; &lt;span style="color:#ff0000;"&gt;Executed&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&amp;quot;CommandBinding_Executed&amp;quot;&lt;/span&gt; &lt;/p&gt;
&lt;p style="margin:0px;"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;nbsp; &lt;span style="color:#ff0000;"&gt;CanExecute&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&amp;quot;CommandBinding_CanExecute&amp;quot;/&amp;gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin:0px;"&gt;&lt;span style="color:#a31515;"&gt;&amp;nbsp; &lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#a31515;"&gt;Window.CommandBindings&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&amp;gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin:0px;"&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style="margin:0px;"&gt;&lt;span style="color:#a31515;"&gt;&amp;nbsp; &lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#a31515;"&gt;Grid&lt;/span&gt;&lt;span style="color:#ff0000;"&gt; x&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;:&lt;/span&gt;&lt;span style="color:#ff0000;"&gt;Name&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&amp;quot;MainGrid&amp;quot;&amp;gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin:0px;"&gt;&lt;span style="color:#a31515;"&gt;&amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#a31515;"&gt;Grid.RowDefinitions&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&amp;gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin:0px;"&gt;&lt;span style="color:#a31515;"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#a31515;"&gt;RowDefinition&lt;/span&gt;&lt;span style="color:#ff0000;"&gt; Height&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&amp;quot;Auto&amp;quot; /&amp;gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin:0px;"&gt;&lt;span style="color:#a31515;"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#a31515;"&gt;RowDefinition&lt;/span&gt;&lt;span style="color:#ff0000;"&gt; Height&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&amp;quot;218*&amp;quot; /&amp;gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin:0px;"&gt;&lt;span style="color:#a31515;"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#a31515;"&gt;RowDefinition&lt;/span&gt;&lt;span style="color:#ff0000;"&gt; Height&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&amp;quot;Auto&amp;quot; /&amp;gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin:0px;"&gt;&lt;span style="color:#a31515;"&gt;&amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#a31515;"&gt;Grid.RowDefinitions&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&amp;gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin:0px;"&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style="margin:0px;"&gt;&lt;span style="color:#a31515;"&gt;&amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span style="color:#008000;"&gt;&amp;lt;!--&amp;nbsp; Canvas in the main middle section --&amp;gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin:0px;"&gt;&lt;span style="color:#a31515;"&gt;&amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#a31515;"&gt;Canvas&lt;/span&gt;&lt;span style="color:#ff0000;"&gt; x&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;:&lt;/span&gt;&lt;span style="color:#ff0000;"&gt;Name&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&amp;quot;MainCanvas&amp;quot;&lt;/span&gt;&lt;span style="color:#ff0000;"&gt; Grid.Row&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&amp;quot;1&amp;quot;&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin:0px;"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span style="color:#0000ff;"&gt;&amp;gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin:0px;"&gt;&lt;span style="color:#a31515;"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#a31515;"&gt;Image&lt;/span&gt;&lt;span style="color:#ff0000;"&gt; x&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;:&lt;/span&gt;&lt;span style="color:#ff0000;"&gt;Name&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&amp;quot;MoveableImage&amp;quot;&lt;/span&gt;&lt;span style="color:#ff0000;"&gt; Width&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&amp;quot;55&amp;quot;&lt;/span&gt; &lt;/p&gt;
&lt;p style="margin:0px;"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;nbsp; &lt;span style="color:#ff0000;"&gt;Source&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&amp;quot;questionmark2.jpg&amp;quot;&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin:0px;"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;nbsp; &lt;span style="color:#ff0000;"&gt;Canvas.Left&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&amp;quot;0&amp;quot;&lt;/span&gt;&lt;span style="color:#ff0000;"&gt; Canvas.Top&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&amp;quot;0&amp;quot;&lt;/span&gt; &lt;/p&gt;
&lt;p style="margin:0px;"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;nbsp; &lt;span style="color:#ff0000;"&gt;MouseDown&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&amp;quot;MoveableImage_MouseDown&amp;quot;&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;/&amp;gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin:0px;"&gt;&lt;span style="color:#a31515;"&gt;&amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#a31515;"&gt;Canvas&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&amp;gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin:0px;"&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style="margin:0px;"&gt;&lt;span style="color:#a31515;"&gt;&amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span style="color:#008000;"&gt;&amp;lt;!-- Menu at the top --&amp;gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin:0px;"&gt;&lt;span style="color:#a31515;"&gt;&amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#a31515;"&gt;Menu&lt;/span&gt;&lt;span style="color:#ff0000;"&gt; Grid.Row&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&amp;quot;0&amp;quot;&lt;/span&gt;&lt;span style="color:#ff0000;"&gt; Margin&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&amp;quot;3&amp;quot;&amp;gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin:0px;"&gt;&lt;span style="color:#a31515;"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#a31515;"&gt;MenuItem&lt;/span&gt;&lt;span style="color:#ff0000;"&gt; Header&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&amp;quot;Move It&amp;quot;&lt;/span&gt;&lt;span style="color:#ff0000;"&gt; Margin&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&amp;quot;5&amp;quot;&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin:0px;"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span style="color:#ff0000;"&gt;Command&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&amp;quot;local:MoveItCommand2.MoveIt&amp;quot; /&amp;gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin:0px;"&gt;&lt;span style="color:#a31515;"&gt;&amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#a31515;"&gt;Menu&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&amp;gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin:0px;"&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style="margin:0px;"&gt;&lt;span style="color:#a31515;"&gt;&amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#a31515;"&gt;ToolBar&lt;/span&gt;&lt;span style="color:#ff0000;"&gt; Grid.Row&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&amp;quot;2&amp;quot; &amp;gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin:0px;"&gt;&lt;span style="color:#a31515;"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#a31515;"&gt;Button&lt;/span&gt;&lt;span style="color:#ff0000;"&gt; Content&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&amp;quot;Move It&amp;quot;&lt;/span&gt; &lt;/p&gt;
&lt;p style="margin:0px;"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;nbsp; &lt;span style="color:#ff0000;"&gt;Command&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&amp;quot;local:MoveItCommand2.MoveIt&amp;quot;&lt;/span&gt;&amp;nbsp; &lt;span style="color:#0000ff;"&gt;/&amp;gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin:0px;"&gt;&lt;span style="color:#a31515;"&gt;&amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#a31515;"&gt;ToolBar&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&amp;gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin:0px;"&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style="margin:0px;"&gt;&lt;span style="color:#a31515;"&gt;&amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#a31515;"&gt;Button&lt;/span&gt;&lt;span style="color:#ff0000;"&gt; Grid.Row&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&amp;quot;1&amp;quot;&lt;/span&gt;&lt;span style="color:#ff0000;"&gt; VerticalAlignment&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&amp;quot;Bottom&amp;quot;&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin:0px;"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;nbsp; &lt;span style="color:#ff0000;"&gt;HorizontalAlignment&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&amp;quot;Right&amp;quot;&lt;/span&gt; &lt;span style="color:#ff0000;"&gt;Width&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&amp;quot;100&amp;quot;&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin:0px;"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;nbsp; &lt;span style="color:#ff0000;"&gt;Height&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&amp;quot;33&amp;quot;&lt;/span&gt;&lt;span style="color:#ff0000;"&gt; Content&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&amp;quot;Move It&amp;quot;&lt;/span&gt;&lt;span style="color:#ff0000;"&gt; Margin&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&amp;quot;0,0,4,2&amp;quot;&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin:0px;"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;nbsp; &lt;span style="color:#ff0000;"&gt;Command&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&amp;quot;local:MoveItCommand2.MoveIt&amp;quot;&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;/&amp;gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin:0px;"&gt;&lt;span style="color:#a31515;"&gt;&amp;nbsp; &lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#a31515;"&gt;Grid&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&amp;gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin:0px;"&gt;&lt;span style="color:#0000ff;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#a31515;"&gt;Window&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&amp;gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin:0px;"&gt;&amp;nbsp;&lt;/p&gt;
&lt;/div&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://cs.vbcity.com/aggbug.aspx?PostID=266" width="1" height="1"&gt;</description><category domain="http://cs.vbcity.com/blogs/xtab/archive/tags/XAML/default.aspx">XAML</category><category domain="http://cs.vbcity.com/blogs/xtab/archive/tags/WPF/default.aspx">WPF</category><category domain="http://cs.vbcity.com/blogs/xtab/archive/tags/Commands/default.aspx">Commands</category><category domain="http://cs.vbcity.com/blogs/xtab/archive/tags/.NET/default.aspx">.NET</category><category domain="http://cs.vbcity.com/blogs/xtab/archive/tags/VB.NET/default.aspx">VB.NET</category><category domain="http://cs.vbcity.com/blogs/xtab/archive/tags/Visual+Basic/default.aspx">Visual Basic</category><category domain="http://cs.vbcity.com/blogs/xtab/archive/tags/Visual+Basic+WPF/default.aspx">Visual Basic WPF</category><category domain="http://cs.vbcity.com/blogs/xtab/archive/tags/Custom+Command/default.aspx">Custom Command</category></item><item><title>Visual Studio 2010  - Changes to Help System</title><link>http://cs.vbcity.com/blogs/mike-mcintyre/archive/2009/11/03/visual-studio-2010-changes-to-help-system.aspx</link><pubDate>Tue, 03 Nov 2009 15:01:00 GMT</pubDate><guid isPermaLink="false">921a0936-6df9-4a08-8006-68f3b1747f32:271</guid><dc:creator>Mike McIntyre</dc:creator><slash:comments>0</slash:comments><description>&lt;p&gt;There are changes to the Visual Studio 2010 help system that you&amp;#39;ll want to learn about.&lt;/p&gt;
&lt;p&gt;For example, the new &amp;#39;Manage Help Settings&amp;#39; menu item:&lt;/p&gt;
&lt;p&gt;&lt;img src="http://cs.vbcity.com/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/mike-mcintyre.VS2010/VS2010ManageHelpSettingsMenu.jpg" alt="" /&gt;&lt;/p&gt;
&lt;p&gt;The menu item opens the new &amp;#39;Help Library Manager&amp;#39; dialog:&lt;/p&gt;
&lt;p&gt;&lt;img src="http://cs.vbcity.com/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/mike-mcintyre.VS2010/VS2010HelpLibraryManager.jpg" alt="" /&gt;&lt;/p&gt;
&lt;p&gt;From MSDN: &amp;quot;The Help Library Manager (HLM) application allows you to manage product documentation in the local Microsoft Help 3.0 content store. Using HLM, you can find and install new content from the web or from media, go online to get updates for your offline content, and remove offline content. The Help Library Manager also manages settings that allow you to customize your help experience.&amp;quot;&lt;/p&gt;
&lt;p&gt;Read more at: &lt;a href="http://127.0.0.1/help/1/ms.help?method=page&amp;amp;id=7415EE68-6B71-45CA-9773-15E236AEBC71&amp;amp;product=vs&amp;amp;productversion=100&amp;amp;locale=en-US&amp;amp;topicversion=0&amp;amp;SQM=2" class="null"&gt;Help Library Manager&lt;/a&gt; &lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://cs.vbcity.com/aggbug.aspx?PostID=271" width="1" height="1"&gt;</description><category domain="http://cs.vbcity.com/blogs/mike-mcintyre/archive/tags/Visual+Studio+2010/default.aspx">Visual Studio 2010</category><category domain="http://cs.vbcity.com/blogs/mike-mcintyre/archive/tags/help/default.aspx">help</category></item><item><title>How To Create and Use a Custom Command in WPF</title><link>http://cs.vbcity.com/blogs/xtab/archive/2009/11/02/how-to-create-and-use-a-custom-command-in-wpf.aspx</link><pubDate>Mon, 02 Nov 2009 04:45:00 GMT</pubDate><guid isPermaLink="false">921a0936-6df9-4a08-8006-68f3b1747f32:264</guid><dc:creator>XTab</dc:creator><slash:comments>0</slash:comments><description>&lt;p&gt;&lt;span style="font-family:Calibri;"&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&amp;nbsp;I&amp;#39;ve got to be honest and admit up front that initially I wasn&amp;#39;t completely sold on the idea that WPF Commands are the great leap forward that they are sometimes billed as. OK, so I get that they can reduce the repetition of event handling code, but even their most ardent supporters aren&amp;#39;t going to be able to claim that the required code is particularly intuitive. I will agree though that the availability of CanExecute is useful sometimes when multiple controls are bound to a Command. As a WinForms developer moving to WPF, I still find that in many cases I&amp;#39;m happy to use event handlers and, where necessary, a utility method or two. &lt;br /&gt;&lt;br /&gt;So, having got that caveat out of the way, let&amp;#39;s look at a basic situation where we want a range of different user actions to trigger the same task. &lt;/p&gt;
&lt;p&gt;I&amp;#39;ve decided to use the scenario that I covered in &lt;a href="http://cs.vbcity.com/blogs/xtab/archive/2009/10/27/wpf-how-to-move-elements-at-runtime.aspx"&gt;this blog&lt;/a&gt;. It&amp;#39;s maybe not the most realistic scenario, but it does give an opportunity to use a wide range of user inputs and gestures to move the image across the screen. It also allows the use of the CanExecute event. &lt;/p&gt;
&lt;p&gt;In the earlier blog, the user had to click on an image to make it move from left to right across a Canvas. This can soon become tiresome, so by means of a Command we&amp;#39;ll give her several other options. In order to make the use of CanExecute realistic, we will say that once the image reaches the far right edge of the Canvas, it must stay there. So the image move will be allowed to happen (i.e. CanExecute) as long as it hasn&amp;#39;t reached the right hand edge of the canvas. &lt;/p&gt;
&lt;p&gt;&lt;span style="text-decoration:underline;"&gt;Creating the User Interface&lt;/span&gt;&lt;br /&gt;The following XAML will create an updated version of the Canvas-and-Image UI used previously. This version includes various controls that will be bound to the Command.&amp;nbsp;&lt;/p&gt;
&lt;div style="font-family:Courier New;font-size:10pt;color:black;background:white;"&gt;
&lt;p style="margin:0px;"&gt;&lt;span style="color:#0000ff;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#a31515;"&gt;Window&lt;/span&gt;&lt;span style="color:#ff0000;"&gt; x&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;:&lt;/span&gt;&lt;span style="color:#ff0000;"&gt;Class&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&amp;quot;Window3&amp;quot;&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin:0px;"&gt;&amp;nbsp;&amp;nbsp; &lt;span style="color:#ff0000;"&gt;xmlns&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&amp;quot;http://schemas.microsoft.com/winfx/2006/xaml/presentation&amp;quot;&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin:0px;"&gt;&amp;nbsp;&amp;nbsp; &lt;span style="color:#ff0000;"&gt;xmlns&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;:&lt;/span&gt;&lt;span style="color:#ff0000;"&gt;x&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&amp;quot;http://schemas.microsoft.com/winfx/2006/xaml&amp;quot;&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin:0px;"&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style="margin:0px;"&gt;&amp;nbsp;&amp;nbsp; &lt;span style="color:#ff0000;"&gt;Title&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&amp;quot;Using A Command&amp;quot;&lt;/span&gt;&lt;span style="color:#ff0000;"&gt; Height&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&amp;quot;300&amp;quot;&lt;/span&gt;&lt;span style="color:#ff0000;"&gt; Width&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&amp;quot;300&amp;quot;&amp;gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin:0px;"&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style="margin:0px;"&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style="margin:0px;"&gt;&lt;span style="color:#a31515;"&gt;&amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#a31515;"&gt;Grid&lt;/span&gt;&lt;span style="color:#ff0000;"&gt; x&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;:&lt;/span&gt;&lt;span style="color:#ff0000;"&gt;Name&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&amp;quot;MainGrid&amp;quot;&amp;gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin:0px;"&gt;&lt;span style="color:#a31515;"&gt;&amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#a31515;"&gt;Grid.RowDefinitions&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&amp;gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin:0px;"&gt;&lt;span style="color:#a31515;"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#a31515;"&gt;RowDefinition&lt;/span&gt;&lt;span style="color:#ff0000;"&gt; Height&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&amp;quot;Auto&amp;quot; /&amp;gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin:0px;"&gt;&lt;span style="color:#a31515;"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#a31515;"&gt;RowDefinition&lt;/span&gt;&lt;span style="color:#ff0000;"&gt; Height&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&amp;quot;218*&amp;quot; /&amp;gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin:0px;"&gt;&lt;span style="color:#a31515;"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#a31515;"&gt;RowDefinition&lt;/span&gt;&lt;span style="color:#ff0000;"&gt; Height&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&amp;quot;Auto&amp;quot; /&amp;gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin:0px;"&gt;&lt;span style="color:#a31515;"&gt;&amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#a31515;"&gt;Grid.RowDefinitions&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&amp;gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin:0px;"&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style="margin:0px;"&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style="margin:0px;"&gt;&lt;span style="color:#a31515;"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span style="color:#008000;"&gt;&amp;lt;!--&amp;nbsp; Canvas in the main middle section --&amp;gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin:0px;"&gt;&lt;span style="color:#a31515;"&gt;&amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#a31515;"&gt;Canvas&lt;/span&gt;&lt;span style="color:#ff0000;"&gt; x&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;:&lt;/span&gt;&lt;span style="color:#ff0000;"&gt;Name&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&amp;quot;MainCanvas&amp;quot;&lt;/span&gt;&lt;span style="color:#ff0000;"&gt; Grid.Row&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&amp;quot;1&amp;quot;&amp;gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin:0px;"&gt;&lt;span style="color:#a31515;"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#a31515;"&gt;Image&lt;/span&gt;&lt;span style="color:#ff0000;"&gt; x&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;:&lt;/span&gt;&lt;span style="color:#ff0000;"&gt;Name&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&amp;quot;MoveableImage&amp;quot;&lt;/span&gt;&lt;span style="color:#ff0000;"&gt; Width&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&amp;quot;55&amp;quot;&lt;/span&gt;&lt;span style="color:#ff0000;"&gt; Source&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&amp;quot;questionmark2.jpg&amp;quot;&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin:0px;"&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style="margin:0px;"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span style="color:#ff0000;"&gt;Canvas.Left&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&amp;quot;0&amp;quot;&lt;/span&gt;&lt;span style="color:#ff0000;"&gt; Canvas.Top&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&amp;quot;0&amp;quot; /&amp;gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin:0px;"&gt;&lt;span style="color:#a31515;"&gt;&amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#a31515;"&gt;Canvas&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&amp;gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin:0px;"&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style="margin:0px;"&gt;&lt;span style="color:#a31515;"&gt;&amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span style="color:#008000;"&gt;&amp;lt;!-- Menu at the top --&amp;gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin:0px;"&gt;&lt;span style="color:#a31515;"&gt;&amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#a31515;"&gt;Menu&lt;/span&gt;&lt;span style="color:#ff0000;"&gt; Grid.Row&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&amp;quot;0&amp;quot;&lt;/span&gt;&lt;span style="color:#ff0000;"&gt; Margin&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&amp;quot;3&amp;quot;&amp;gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin:0px;"&gt;&lt;span style="color:#a31515;"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#a31515;"&gt;MenuItem&lt;/span&gt;&lt;span style="color:#ff0000;"&gt; Header&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&amp;quot;Move It&amp;quot;&lt;/span&gt;&lt;span style="color:#ff0000;"&gt; Margin&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&amp;quot;5&amp;quot;&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin:0px;"&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style="margin:0px;"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;nbsp; &lt;span style="color:#0000ff;"&gt;&amp;gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#a31515;"&gt;MenuItem&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&amp;gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin:0px;"&gt;&lt;span style="color:#a31515;"&gt;&amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#a31515;"&gt;Menu&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&amp;gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin:0px;"&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style="margin:0px;"&gt;&lt;span style="color:#a31515;"&gt;&amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#a31515;"&gt;ToolBar&lt;/span&gt;&lt;span style="color:#ff0000;"&gt; Grid.Row&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&amp;quot;2&amp;quot; &amp;gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin:0px;"&gt;&lt;span style="color:#a31515;"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#a31515;"&gt;Button&lt;/span&gt;&lt;span style="color:#ff0000;"&gt; Content&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&amp;quot;Move It&amp;quot;&lt;/span&gt; &lt;/p&gt;
&lt;p style="margin:0px;"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span style="color:#0000ff;"&gt;/&amp;gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin:0px;"&gt;&lt;span style="color:#a31515;"&gt;&amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#a31515;"&gt;ToolBar&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&amp;gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin:0px;"&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style="margin:0px;"&gt;&lt;span style="color:#a31515;"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#a31515;"&gt;Button&lt;/span&gt;&lt;span style="color:#ff0000;"&gt; Grid.Row&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&amp;quot;1&amp;quot;&lt;/span&gt;&lt;span style="color:#ff0000;"&gt; VerticalAlignment&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&amp;quot;Bottom&amp;quot;&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin:0px;"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;nbsp; &lt;span style="color:#ff0000;"&gt;HorizontalAlignment&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&amp;quot;Right&amp;quot;&lt;/span&gt; &lt;span style="color:#ff0000;"&gt;Width&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&amp;quot;100&amp;quot;&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin:0px;"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;nbsp; &lt;span style="color:#ff0000;"&gt;Height&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&amp;quot;33&amp;quot;&lt;/span&gt;&lt;span style="color:#ff0000;"&gt; Content&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&amp;quot;Move It&amp;quot;&lt;/span&gt;&lt;span style="color:#ff0000;"&gt; Margin&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&amp;quot;0,0,4,2&amp;quot;&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin:0px;"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span style="color:#0000ff;"&gt;/&amp;gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin:0px;"&gt;&lt;span style="color:#a31515;"&gt;&amp;nbsp; &lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#a31515;"&gt;Grid&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&amp;gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin:0px;"&gt;&lt;span style="color:#0000ff;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#a31515;"&gt;Window&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&amp;gt;&lt;/span&gt;&lt;/p&gt;
&lt;/div&gt;
&lt;p&gt;&amp;nbsp;(If you&amp;#39;ve looked at the markup closely and think that&amp;nbsp;the order of elements is haphazard, you would be wrong.&amp;nbsp;&amp;nbsp; Try moving the MenuItem to what seems a more logical position above the Canvas and you will get an Error when the code is completed.&amp;nbsp; As you will see, the code behind for the MenuItem will eventually have a link to the Image.&amp;nbsp;&amp;nbsp; So therefore&amp;nbsp;the Image must&amp;nbsp;be created first in the top down XAML file, before the MenuItem can know about it&amp;nbsp;.&amp;nbsp; I often think that it&amp;#39;s these little potential Gotchas that make the WinForms-to-WPF learning curve so difficult.)&lt;/p&gt;
&lt;p&gt;This is what it should look like:&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&amp;nbsp;&lt;img src="http://www.xtabvbcity.plus.com/Blogs/Blog%20-%20Command01.png" alt="" /&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="text-decoration:underline;"&gt;Creating the Command&lt;/span&gt;&lt;br /&gt;Let&amp;#39;s start by creating a new Command Class called MoveItCommand. It will have a single property named MoveIt, a backing field named _move it and a parameterless constructor. The property and field are of type RoutedUICommand, but apart from that are standard and really don&amp;#39;t need any additional explanation:&amp;nbsp;&lt;/p&gt;
&lt;div style="font-family:Courier New;font-size:10pt;color:black;background:white;"&gt;
&lt;p style="margin:0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color:#0000ff;"&gt;Private&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;Shared&lt;/span&gt; _moveit &lt;span style="color:#0000ff;"&gt;As&lt;/span&gt; RoutedUICommand&lt;/p&gt;
&lt;p style="margin:0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color:#0000ff;"&gt;Public&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;Shared&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;ReadOnly&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;Property&lt;/span&gt; MoveIt() &lt;span style="color:#0000ff;"&gt;As&lt;/span&gt; RoutedUICommand&lt;/p&gt;
&lt;p style="margin:0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color:#0000ff;"&gt;Get&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin:0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color:#0000ff;"&gt;Return&lt;/span&gt; _moveit&lt;/p&gt;
&lt;p style="margin:0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color:#0000ff;"&gt;End&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;Get&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin:0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color:#0000ff;"&gt;End&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;Property&lt;/span&gt;&lt;/p&gt;
&lt;/div&gt;
&lt;p&gt;&amp;nbsp;The constructor is used to create the various keyboard and mouse gestures that can be used to move the image. For the purposes of demonstration, I&amp;#39;ve gone totally overboard on these and have included four variations in the final version. But for clarity, I am only showing one in the code snippet below:&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color:#0000ff;"&gt;Shared&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;Sub&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;New&lt;/span&gt;()&lt;/p&gt;
&lt;div style="font-family:Courier New;font-size:10pt;color:black;background:white;"&gt;
&lt;p style="margin:0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color:#008000;"&gt;&amp;#39;&amp;nbsp; Add keyboard and mouse gestures&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin:0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color:#0000ff;"&gt;Dim&lt;/span&gt; UserInputs &lt;span style="color:#0000ff;"&gt;As&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;New&lt;/span&gt; InputGestureCollection()&lt;/p&gt;
&lt;p style="margin:0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; UserInputs.Add(&lt;span style="color:#0000ff;"&gt;New&lt;/span&gt; KeyGesture(Key.M, ModifierKeys.Alt))&lt;/p&gt;
&lt;p style="margin:0px;"&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style="margin:0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color:#008000;"&gt;&amp;#39;&amp;nbsp; Assign these gestures to the _moveit field (and thereby to the MoveIt property)&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin:0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; _moveit = &lt;span style="color:#0000ff;"&gt;New&lt;/span&gt; RoutedUICommand(&lt;span style="color:#a31515;"&gt;&amp;quot;Move Element&amp;quot;&lt;/span&gt;, &lt;span style="color:#a31515;"&gt;&amp;quot;Move&amp;quot;&lt;/span&gt;, &lt;span style="color:#0000ff;"&gt;GetType&lt;/span&gt;(MoveItCommand), UserInputs)&lt;/p&gt;
&lt;p style="margin:0px;"&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style="margin:0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color:#0000ff;"&gt;End&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;Sub&lt;/span&gt;&amp;nbsp;&lt;/p&gt;
&lt;/div&gt;
&lt;ul&gt;
&lt;li&gt;The constructor begins by creating a new empty collection of mouse gestures. &lt;/li&gt;
&lt;li&gt;The second line creates and stores a gesture which takes the Alt and M keys as the combination to be used to fire this command. Notice the order of the keys used as arguments - effectively it is &amp;quot;M &amp;amp; Alt&amp;quot; which isn&amp;#39;t the way we usually think of the combination. If you switch the order and place the Modifier key first, you will get a runtime error. Trust me, I&amp;#39;ve been there, done that! &lt;/li&gt;
&lt;li&gt;Finally, a new RoutedCommand is created, containing descriptive text, its name, owner type (which is this custom command class - MoveItCommand), and the collection of Gestures that will work with this command. &lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&amp;nbsp;Note that all the members of this class are Shared, ensuring that only instance of the Command will be in use in the application when it runs.&lt;/p&gt;
&lt;p&gt;&lt;span style="text-decoration:underline;"&gt;Additional Gestures&lt;/span&gt; &lt;br /&gt;If you are happy with how the Class and its Constructor works, I&amp;#39;ll now add in those other gestures I mentioned. These include F12 on its own, a mouse click on its own and finally a combination of mouse click and key press. Here&amp;#39;s the revised code:&amp;nbsp;&amp;nbsp;&lt;/p&gt;
&lt;div style="font-family:Courier New;font-size:10pt;color:black;background:white;"&gt;
&lt;p style="margin:0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color:#0000ff;"&gt;Shared&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;Sub&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;New&lt;/span&gt;()&lt;/p&gt;
&lt;p style="margin:0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color:#008000;"&gt;&amp;#39;&amp;nbsp; Add keyboard and mouse gestures&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin:0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color:#0000ff;"&gt;Dim&lt;/span&gt; UserInputs &lt;span style="color:#0000ff;"&gt;As&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;New&lt;/span&gt; InputGestureCollection()&lt;/p&gt;
&lt;p style="margin:0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; UserInputs.Add(&lt;span style="color:#0000ff;"&gt;New&lt;/span&gt; KeyGesture(Key.M, ModifierKeys.Alt))&lt;/p&gt;
&lt;p style="margin:0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; UserInputs.Add(&lt;span style="color:#0000ff;"&gt;New&lt;/span&gt; KeyGesture(Key.F12, ModifierKeys.None))&lt;/p&gt;
&lt;p style="margin:0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; UserInputs.Add(&lt;span style="color:#0000ff;"&gt;New&lt;/span&gt; MouseGesture(MouseAction.RightClick, ModifierKeys.None))&lt;/p&gt;
&lt;p style="margin:0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; UserInputs.Add(&lt;span style="color:#0000ff;"&gt;New&lt;/span&gt; MouseGesture(MouseAction.LeftClick, ModifierKeys.Shift))&lt;/p&gt;
&lt;p style="margin:0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color:#008000;"&gt;&amp;#39;&amp;nbsp; Assign these gestures to the _moveit field (and thereby to the MoveIt property)&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin:0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; _moveit = &lt;span style="color:#0000ff;"&gt;New&lt;/span&gt; RoutedUICommand(&lt;span style="color:#a31515;"&gt;&amp;quot;Move Element&amp;quot;&lt;/span&gt;, &lt;span style="color:#a31515;"&gt;&amp;quot;Move&amp;quot;&lt;/span&gt;, &lt;span style="color:#0000ff;"&gt;GetType&lt;/span&gt;(MoveItCommand), UserInputs)&lt;/p&gt;
&lt;p style="margin:0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color:#0000ff;"&gt;End&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;Sub&lt;/span&gt;&lt;/p&gt;
&lt;/div&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;The first gesture is Alt and M, which I&amp;#39;ve already covered. &lt;/li&gt;
&lt;li&gt;The second gesture is the F12 key on its own. Note that you must include Modifiers.None. if you don&amp;#39;t, you will get a runtime error. &lt;/li&gt;
&lt;li&gt;The third gesture will fire the command when the mouse is right clicked anywhere in the Window. Because of the way that WPF and RoutedCommands work, this effectively means that you can still click on the Image to make it move. If you wanted to limit the mouse click to the Image only, you could harness the power of Bubbling and Tunneling events to trap the mouse button press at the Image level. I haven&amp;#39;t done that in this example. &lt;/li&gt;
&lt;li&gt;The final gesture takes a combination of both the mouse left button click together with holding down the Shift key. Quite awkward to use and only included to demonstrate the range of available gestures. &lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;span style="text-decoration:underline;"&gt;Command Bindings&lt;/span&gt;&lt;br /&gt;Having created the custom Command Class, if we want to use it in the XAML - and we do - then it is necessary to create an XML namespace mapping. Without this link, the XAML markup would have no idea about the existence of the class and its property. The syntax is fairly simple:&amp;nbsp;&lt;/p&gt;
&lt;div style="font-family:Courier New;font-size:10pt;color:black;background:white;"&gt;
&lt;p style="margin:0px;"&gt;&amp;nbsp;&amp;nbsp; &lt;span style="color:#ff0000;"&gt;xmlns&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;:&lt;/span&gt;&lt;span style="color:#ff0000;"&gt;local&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&amp;quot;clr-namespace:GetValue&amp;quot;&lt;/span&gt;&amp;nbsp;&lt;/p&gt;
&lt;/div&gt;
&lt;p&gt;The alias of &amp;#39;local&amp;#39; is used as the key which is mapped to the namespace in which the MoveItCommand class resides. The namespace is the same as the name of the project and in this case the project is named &amp;#39;GetValue&amp;#39;. &lt;/p&gt;
&lt;p&gt;&lt;img src="http://www.xtabvbcity.plus.com/Blogs/Blog%20-%20Command02.png" alt="" /&gt;&lt;/p&gt;
&lt;p&gt;Given this namespace mapping, we can now set up the CommandBinding in the XAML pane:&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;div style="font-family:Courier New;font-size:10pt;color:black;background:white;"&gt;
&lt;p style="margin:0px;"&gt;&lt;span style="color:#a31515;"&gt;&amp;nbsp; &lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#a31515;"&gt;Window.CommandBindings&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&amp;gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin:0px;"&gt;&lt;span style="color:#a31515;"&gt;&amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#a31515;"&gt;CommandBinding&lt;/span&gt;&lt;span style="color:#ff0000;"&gt; Command&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&amp;quot;local:MoveItCommand.MoveIt&amp;quot;&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin:0px;"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;nbsp; &lt;span style="color:#ff0000;"&gt;Executed&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&amp;quot;CommandBinding_Executed&amp;quot;&lt;/span&gt; &lt;/p&gt;
&lt;p style="margin:0px;"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;nbsp; &lt;span style="color:#ff0000;"&gt;CanExecute&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&amp;quot;CommandBinding_CanExecute&amp;quot;/&amp;gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin:0px;"&gt;&lt;span style="color:#a31515;"&gt;&amp;nbsp; &lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#a31515;"&gt;Window.CommandBindings&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&amp;gt;&lt;/span&gt;&lt;/p&gt;
&lt;/div&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;As you see from the snippet above, you create a new CommandBinding inside a CommandBindings collection. The Command property of the CommandBinding points to that MoveIt property created in the MoveItCommand class. &lt;/p&gt;
&lt;p&gt;The Executed and CanExecute properties point to two methods which we will create next in the code-behind. &lt;/p&gt;
&lt;p&gt;&lt;span style="text-decoration:underline;"&gt;Executing The CommandBinding&lt;/span&gt; The task of the CommandBinding_Executed method is to carry out whatever tasks we want to have actioned when the command is invoked. In this demonstration project, this task is simply to shunt the image a few units to the right. So the code is as follows:&amp;nbsp;&amp;nbsp;&lt;/p&gt;
&lt;div style="font-family:Courier New;font-size:10pt;color:black;background:white;"&gt;
&lt;p style="margin:0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color:#0000ff;"&gt;Private&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;Sub&lt;/span&gt; CommandBinding_Executed(&lt;span style="color:#0000ff;"&gt;ByVal&lt;/span&gt; sender &lt;span style="color:#0000ff;"&gt;As&lt;/span&gt; System.Object, &lt;span style="color:#0000ff;"&gt;ByVal&lt;/span&gt; e &lt;span style="color:#0000ff;"&gt;As&lt;/span&gt; System.Windows.Input.ExecutedRoutedEventArgs)&lt;/p&gt;
&lt;p style="margin:0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color:#008000;"&gt;&amp;#39;&amp;nbsp; Move the image 5 units to the right&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin:0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color:#0000ff;"&gt;Dim&lt;/span&gt; LeftPos &lt;span style="color:#0000ff;"&gt;As&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;Double&lt;/span&gt; = MoveableImage.GetValue(Canvas.LeftProperty)&lt;/p&gt;
&lt;p style="margin:0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; MoveableImage.SetValue(Canvas.LeftProperty, LeftPos + 5)&lt;/p&gt;
&lt;p style="margin:0px;"&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style="margin:0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color:#0000ff;"&gt;End&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;Sub&lt;/span&gt;&amp;nbsp;&lt;/p&gt;
&lt;/div&gt;
&lt;p&gt;(If you are not sure about how the GetValue and SetValue functions work, you can read up on it in my blog &lt;a href="http://cs.vbcity.com/blogs/xtab/archive/2009/10/27/wpf-how-to-move-elements-at-runtime.aspx"&gt;here&lt;/a&gt;). &lt;/p&gt;
&lt;p&gt;&lt;span style="text-decoration:underline;"&gt;CanExecute&lt;/span&gt;&lt;br /&gt;CanExecute is an optional feature which can be quite useful. In this demonstration, we will only allow the Command to work (and therefore only allow the Image to continue moving to the right) if it hasn&amp;#39;t reached the right hand edge of the Canvas. More subtly, if CanExecute becomes set to False, any controls that are bound to the Command will automatically be disabled. I will add Command Bindings to the buttons, etc shortly.&lt;/p&gt;
&lt;p&gt;First, here is the code for the CanExecute method:&amp;nbsp;&lt;/p&gt;
&lt;div style="font-family:Courier New;font-size:10pt;color:black;background:white;"&gt;
&lt;p style="margin:0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color:#0000ff;"&gt;Private&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;Sub&lt;/span&gt; CommandBinding_CanExecute(&lt;span style="color:#0000ff;"&gt;ByVal&lt;/span&gt; sender &lt;span style="color:#0000ff;"&gt;As&lt;/span&gt; System.Object, &lt;span style="color:#0000ff;"&gt;ByVal&lt;/span&gt; e &lt;span style="color:#0000ff;"&gt;As&lt;/span&gt; System.Windows.Input.CanExecuteRoutedEventArgs)&lt;/p&gt;
&lt;p style="margin:0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color:#008000;"&gt;&amp;#39;&amp;nbsp; Only allow execution of the command if the image&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin:0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color:#008000;"&gt;&amp;#39;&amp;nbsp; has not yet reached the right hand edge.&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin:0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; e.CanExecute = MoveableImage.GetValue(Canvas.LeftProperty) &amp;lt; (MainCanvas.ActualWidth - MoveableImage.Width)&lt;/p&gt;
&lt;p style="margin:0px;"&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style="margin:0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color:#0000ff;"&gt;End&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;Sub&lt;/span&gt;&amp;nbsp;&lt;/p&gt;
&lt;/div&gt;
&lt;p&gt;It tests the current position of the Image to see if it has reached the right hand edge of the Canvas. CanExecute will be set to True if there is still space to the right side of the Image, otherwise it will be set to False.&lt;/p&gt;
&lt;p&gt;The complete code behind for the Window and the Custom Command class together now looks like this:&amp;nbsp;&lt;/p&gt;
&lt;div style="font-family:Courier New;font-size:10pt;color:black;background:white;"&gt;
&lt;p style="margin:0px;"&gt;&lt;span style="color:#0000ff;"&gt;Partial&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;Public&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;Class&lt;/span&gt; Window3&lt;/p&gt;
&lt;p style="margin:0px;"&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style="margin:0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color:#0000ff;"&gt;Private&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;Sub&lt;/span&gt; CommandBinding_Executed(&lt;span style="color:#0000ff;"&gt;ByVal&lt;/span&gt; sender &lt;span style="color:#0000ff;"&gt;As&lt;/span&gt; System.Object, &lt;span style="color:#0000ff;"&gt;ByVal&lt;/span&gt; e &lt;span style="color:#0000ff;"&gt;As&lt;/span&gt; System.Windows.Input.ExecutedRoutedEventArgs)&lt;/p&gt;
&lt;p style="margin:0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color:#008000;"&gt;&amp;#39;&amp;nbsp; Move the image 5 units to the right&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin:0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color:#0000ff;"&gt;Dim&lt;/span&gt; LeftPos &lt;span style="color:#0000ff;"&gt;As&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;Double&lt;/span&gt; = MoveableImage.GetValue(Canvas.LeftProperty)&lt;/p&gt;
&lt;p style="margin:0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; MoveableImage.SetValue(Canvas.LeftProperty, LeftPos + 5)&lt;/p&gt;
&lt;p style="margin:0px;"&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style="margin:0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color:#0000ff;"&gt;End&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;Sub&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin:0px;"&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style="margin:0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color:#0000ff;"&gt;Private&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;Sub&lt;/span&gt; CommandBinding_CanExecute(&lt;span style="color:#0000ff;"&gt;ByVal&lt;/span&gt; sender &lt;span style="color:#0000ff;"&gt;As&lt;/span&gt; System.Object, &lt;span style="color:#0000ff;"&gt;ByVal&lt;/span&gt; e &lt;span style="color:#0000ff;"&gt;As&lt;/span&gt; System.Windows.Input.CanExecuteRoutedEventArgs)&lt;/p&gt;
&lt;p style="margin:0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color:#008000;"&gt;&amp;#39;&amp;nbsp; Only allow execution of the command if the image&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin:0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color:#008000;"&gt;&amp;#39;&amp;nbsp; has not yet reached the right hand edge.&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin:0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; e.CanExecute = MoveableImage.GetValue(Canvas.LeftProperty) &amp;lt; (MainCanvas.ActualWidth - MoveableImage.Width)&lt;/p&gt;
&lt;p style="margin:0px;"&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style="margin:0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color:#0000ff;"&gt;End&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;Sub&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin:0px;"&gt;&lt;span style="color:#0000ff;"&gt;End&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;Class&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin:0px;"&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style="margin:0px;"&gt;&lt;span style="color:#0000ff;"&gt;Public&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;Class&lt;/span&gt; MoveItCommand&lt;/p&gt;
&lt;p style="margin:0px;"&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style="margin:0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color:#0000ff;"&gt;Private&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;Shared&lt;/span&gt; _moveit &lt;span style="color:#0000ff;"&gt;As&lt;/span&gt; RoutedUICommand&lt;/p&gt;
&lt;p style="margin:0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color:#0000ff;"&gt;Public&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;Shared&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;ReadOnly&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;Property&lt;/span&gt; MoveIt() &lt;span style="color:#0000ff;"&gt;As&lt;/span&gt; RoutedUICommand&lt;/p&gt;
&lt;p style="margin:0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color:#0000ff;"&gt;Get&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin:0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color:#0000ff;"&gt;Return&lt;/span&gt; _moveit&lt;/p&gt;
&lt;p style="margin:0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color:#0000ff;"&gt;End&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;Get&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin:0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color:#0000ff;"&gt;End&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;Property&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin:0px;"&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style="margin:0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color:#0000ff;"&gt;Shared&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;Sub&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;New&lt;/span&gt;()&lt;/p&gt;
&lt;p style="margin:0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color:#008000;"&gt;&amp;#39;&amp;nbsp; Add keyboard and mouse gestures&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin:0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color:#0000ff;"&gt;Dim&lt;/span&gt; UserInputs &lt;span style="color:#0000ff;"&gt;As&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;New&lt;/span&gt; InputGestureCollection()&lt;/p&gt;
&lt;p style="margin:0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; UserInputs.Add(&lt;span style="color:#0000ff;"&gt;New&lt;/span&gt; KeyGesture(Key.M, ModifierKeys.Alt))&lt;/p&gt;
&lt;p style="margin:0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; UserInputs.Add(&lt;span style="color:#0000ff;"&gt;New&lt;/span&gt; KeyGesture(Key.F12, ModifierKeys.None))&lt;/p&gt;
&lt;p style="margin:0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; UserInputs.Add(&lt;span style="color:#0000ff;"&gt;New&lt;/span&gt; MouseGesture(MouseAction.RightClick, ModifierKeys.None))&lt;/p&gt;
&lt;p style="margin:0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; UserInputs.Add(&lt;span style="color:#0000ff;"&gt;New&lt;/span&gt; MouseGesture(MouseAction.LeftClick, ModifierKeys.Shift))&lt;/p&gt;
&lt;p style="margin:0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color:#008000;"&gt;&amp;#39;&amp;nbsp; Assign these gestures to the _moveit field (and thereby to the MoveIt property)&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin:0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; _moveit = &lt;span style="color:#0000ff;"&gt;New&lt;/span&gt; RoutedUICommand(&lt;span style="color:#a31515;"&gt;&amp;quot;Move Element&amp;quot;&lt;/span&gt;, &lt;span style="color:#a31515;"&gt;&amp;quot;Move&amp;quot;&lt;/span&gt;, &lt;span style="color:#0000ff;"&gt;GetType&lt;/span&gt;(MoveItCommand), UserInputs)&lt;/p&gt;
&lt;p style="margin:0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color:#0000ff;"&gt;End&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;Sub&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin:0px;"&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style="margin:0px;"&gt;&lt;span style="color:#0000ff;"&gt;End&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;Class&lt;/span&gt;&amp;nbsp;&lt;/p&gt;
&lt;/div&gt;
&lt;p&gt;At this point, you can run the project and use any of those four gestures to move the Image. Once the Image hits the right hand edge, it will stop moving. The menu item, the two buttons don&amp;#39;t play any part in the action yet - that is, clicking them will have no effect and they won&amp;#39;t become disabled when the Image reaches the right hand limit. &lt;/p&gt;
&lt;p&gt;&lt;span style="text-decoration:underline;"&gt;Binding the Command to the Controls&lt;/span&gt;&lt;br /&gt;All that remains to do is to bind this custom command to the menu item and the two buttons. Now things really do become simple and you can begin to see the potential benefit of using a Command. The following piece of markup is added to the MenuItem, the Button in the Toolbar and the Button in the Canvas:&amp;nbsp;&amp;nbsp;&lt;/p&gt;
&lt;div style="font-family:Courier New;font-size:10pt;color:black;background:white;"&gt;
&lt;p style="margin:0px;"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span style="color:#ff0000;"&gt;Command&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&amp;quot;local:MoveItCommand.MoveIt&amp;quot;&lt;/span&gt;&amp;nbsp;&lt;/p&gt;
&lt;/div&gt;
&lt;p&gt;With those bindings in place, you can move the Image by any of the seven methods included - the four input gestures and by clicking on any of the three controls. Note now that once the Image hits the right hand edge, those three controls all become disabled.&lt;/p&gt;
&lt;p&gt;&lt;img src="http://www.xtabvbcity.plus.com/Blogs/Blog%20-%20Command03.png" alt="" /&gt;&lt;/p&gt;
&lt;p&gt;So, there is a fairly simple example of using your own Command. You can see the final version of the XAML markup &lt;a href="http://www.xtabvbcity.plus.com/Blogs/XAML.docx" class="null"&gt;here&lt;/a&gt;, and also the code behind &lt;a href="http://www.xtabvbcity.plus.com/Blogs/CodeBehind.docx" class="null"&gt;here&lt;/a&gt;.&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://cs.vbcity.com/aggbug.aspx?PostID=264" width="1" height="1"&gt;</description><category domain="http://cs.vbcity.com/blogs/xtab/archive/tags/XAML/default.aspx">XAML</category><category domain="http://cs.vbcity.com/blogs/xtab/archive/tags/WPF/default.aspx">WPF</category><category domain="http://cs.vbcity.com/blogs/xtab/archive/tags/Commands/default.aspx">Commands</category><category domain="http://cs.vbcity.com/blogs/xtab/archive/tags/.NET/default.aspx">.NET</category><category domain="http://cs.vbcity.com/blogs/xtab/archive/tags/Visual+Basic/default.aspx">Visual Basic</category><category domain="http://cs.vbcity.com/blogs/xtab/archive/tags/Visual+Basic+WPF/default.aspx">Visual Basic WPF</category><category domain="http://cs.vbcity.com/blogs/xtab/archive/tags/Custom+Command/default.aspx">Custom Command</category></item><item><title>Project Communication</title><link>http://cs.vbcity.com/blogs/larryblake/archive/2009/10/30/project-communication.aspx</link><pubDate>Fri, 30 Oct 2009 18:44:00 GMT</pubDate><guid isPermaLink="false">921a0936-6df9-4a08-8006-68f3b1747f32:268</guid><dc:creator>LarryBlake</dc:creator><slash:comments>0</slash:comments><description>&lt;p&gt;The most successful projects, software or otherwise, are the ones where everyone has a good idea of what they&amp;#39;re doing and why. A healthy organization communicates its goals, successes and failures, and has well-informed employees.&lt;/p&gt;
&lt;p&gt;A really good illustration of the importance of communication&amp;nbsp;is given by Nobel-winning physicist Richard Feynman in his lecture &lt;a href="http://calteches.library.caltech.edu/14/2/FeynmanLosAlamos.htm" class="null"&gt;Los Alamos From Below&lt;/a&gt; .&amp;nbsp; (This lecture is also a chapter in his very entertaining autobiography, &lt;a href="http://www.amazon.com/Surely-Feynman-Adventures-Curious-Character/dp/0393316041" class="null"&gt;Surely You&amp;#39;re Joking, Mr. Feynman&lt;/a&gt; .)&amp;nbsp; During the second world war, Feynman was part of the Manhattan Project, building an atomic bomb in Los Alamos, New Mexico.&amp;nbsp; This was a top-secret project, but it employed a number of civilians who were not in on the details.&lt;/p&gt;
&lt;p&gt;One day, Feynman was doing some work around the civilian area, and he noticed that some explosive materials were being handled in a very casual way.&amp;nbsp; He realized that there could be a dangerous accident unless the personnel got proper training.&amp;nbsp; When the army finally agreed to allow Feynman to train them, there was also an enormous improvement in productivity.&amp;nbsp; &amp;quot;We&amp;#39;re trying to develop an important weapon before they do?&amp;nbsp; Why didn&amp;#39;t you tell us?&amp;quot;&amp;nbsp; All kinds of new ideas started pouring in.&amp;nbsp; And of course, the immediate danger was avoided.&lt;/p&gt;
&lt;p&gt;Sometimes it&amp;#39;s really easy for a manager or a business person to tell a programmer &amp;quot;I need a program to do X and I need it Thursday&amp;quot;, without explaining why X, and how X fits into the larger picture.&amp;nbsp; This has several risks:&lt;/p&gt;
&lt;p&gt;1. By not discussing it, no one&amp;nbsp;ever thinks of Y, which would be much better for the organization.&amp;nbsp; Opportunity lost.&lt;br /&gt;2.&amp;nbsp;Eventually, someone will think of Y and insist that it be done.&amp;nbsp; At that point, much of&amp;nbsp;the&amp;nbsp;effort on X was a waste of resources.&lt;br /&gt;3. The programmer&amp;nbsp;might be&amp;nbsp;diverted from&amp;nbsp;working on a new release which could easily have&amp;nbsp;incorporated X.&amp;nbsp;&amp;nbsp;Would it have been better to wait and not need a retrofit?&lt;/p&gt;
&lt;p&gt;And finally, the programmer doesn&amp;#39;t feel valued.&amp;nbsp;&amp;nbsp;When employees believe that management just leads them around, often changing course and reversing earlier decisions,&amp;nbsp;it&amp;#39;s easy&amp;nbsp;to feel that it&amp;#39;s just a job, just a paycheck, no thought necessary, why bother.&amp;nbsp; People stagnate.&lt;/p&gt;
&lt;p&gt;I recently attended a project management seminar where the speaker said teams that communicate well are 43% more productive.&amp;nbsp; I&amp;#39;m not sure how you measure that, but it&amp;#39;s an enormous number.&amp;nbsp; Isn&amp;#39;t it worth a few minutes to really discuss what you&amp;#39;re doing?&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://cs.vbcity.com/aggbug.aspx?PostID=268" width="1" height="1"&gt;</description></item><item><title>How To Edit Items in a Windows Forms ListView</title><link>http://cs.vbcity.com/blogs/xtab/archive/2009/10/29/how-to-edit-and-save-items-in-a-winforms-listview.aspx</link><pubDate>Thu, 29 Oct 2009 11:52:00 GMT</pubDate><guid isPermaLink="false">921a0936-6df9-4a08-8006-68f3b1747f32:254</guid><dc:creator>XTab</dc:creator><slash:comments>0</slash:comments><description>&lt;p&gt;&lt;span style="font-family:Calibri;"&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;As I was finishing off the &lt;a href="http://cs.vbcity.com/blogs/xtab/archive/2009/10/26/populating-a-winforms-listview-from-a-text-file.aspx"&gt;previous blog item&lt;/a&gt; on the Windows Forms ListView, it occurred to me that there isn&amp;#39;t much documentation around to explain how to edit the ListView items. &amp;nbsp; So I thought it might be useful to cover a couple of approaches in this blog.&lt;/p&gt;
&lt;p&gt;If you&amp;#39;re disappointed that there isn&amp;#39;t a built-in way to edit all the items and sub items, the thing to bear in mind is that ListView is essentially a display control, rather than an editing one. That said, there &lt;i&gt;is&lt;/i&gt; one built-in tool that you can use - but only as long as you are content to edit items in the first column exclusively. &lt;/p&gt;
&lt;p&gt;&lt;span style="text-decoration:underline;"&gt;Edit First Column Only&lt;/span&gt; &lt;br /&gt;What you can do is set the ListView&amp;#39;s &lt;b&gt;LabelEdit&lt;/b&gt; property to &lt;b&gt;True&lt;/b&gt;. You can set this via the Properties Window or in code, ideally in the Load Event:&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;div style="font-family:Courier New;font-size:10pt;color:black;background:white;"&gt;
&lt;p style="margin:0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color:#0000ff;"&gt;Private&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;Sub&lt;/span&gt; Form2_Load(&lt;span style="color:#0000ff;"&gt;ByVal&lt;/span&gt; sender &lt;span style="color:#0000ff;"&gt;As&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;Object&lt;/span&gt;, &lt;span style="color:#0000ff;"&gt;ByVal&lt;/span&gt; e &lt;span style="color:#0000ff;"&gt;As&lt;/span&gt; System.EventArgs) &lt;span style="color:#0000ff;"&gt;Handles&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;Me&lt;/span&gt;.Load&lt;/p&gt;
&lt;p style="margin:0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; LVMVPs.LabelEdit = &lt;span style="color:#0000ff;"&gt;True&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin:0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color:#0000ff;"&gt;End&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;Sub&lt;/span&gt;&lt;/p&gt;
&lt;/div&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;Now, if you click on an item in the first column on any row, the data in the first column of the selected row will become editable. I actually found that I had to triple-click, but I&amp;#39;m not sure if this is just a reflection of my mouse click speed settings or is the default requirement:&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&amp;nbsp;&lt;img src="http://www.xtabvbcity.plus.com/Blogs/Blog%20-%20LV_Edit01.png" alt="" /&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;If you have the FullRowSelect property set to True, you can click anywhere along the row and the item in the first column will become editable as shown in the screenshot above. If FullRowSelect is set to False then you do need to click directly on the first column.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&amp;nbsp;&lt;img src="http://www.xtabvbcity.plus.com/Blogs/Blog%20-%20LV_Edit02.png" alt="" /&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;span style="text-decoration:underline;"&gt;Edit Any Column&lt;/span&gt;&lt;br /&gt;You have to do a bit of work yourself if you want to be able to edit any cell in the ListView, but there isn&amp;#39;t really much to it. To demonstrate the technique, I&amp;#39;ve added three TextBoxes and an Update button to the Form:&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&amp;nbsp;&lt;img src="http://www.xtabvbcity.plus.com/Blogs/Blog%20-%20LV_Edit03.png" alt="" /&gt;&lt;/p&gt;
&lt;p&gt;The code below will allow the user to Right-click on any row and this will cause the three items of data in that row to be displayed in the three TextBoxes. &lt;/p&gt;
&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color:#0000ff;"&gt;Dim&lt;/span&gt; ItemSelected &lt;span style="color:#0000ff;"&gt;As&lt;/span&gt; ListViewItem&lt;/p&gt;
&lt;div style="font-family:Courier New;font-size:10pt;color:black;background:white;"&gt;
&lt;p style="margin:0px;"&gt;&amp;nbsp;&amp;nbsp; &lt;span style="color:#0000ff;"&gt;Private&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;Sub&lt;/span&gt; LVMVPs_MouseDown(&lt;span style="color:#0000ff;"&gt;ByVal&lt;/span&gt; sender &lt;span style="color:#0000ff;"&gt;As&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;Object&lt;/span&gt;, _&lt;/p&gt;
&lt;p style="margin:0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color:#0000ff;"&gt;ByVal&lt;/span&gt; e &lt;span style="color:#0000ff;"&gt;As&lt;/span&gt; MouseEventArgs) &lt;span style="color:#0000ff;"&gt;Handles&lt;/span&gt; LVMVPs.MouseDown&lt;/p&gt;
&lt;p style="margin:0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color:#008000;"&gt;&amp;#39;&amp;nbsp; Test that user wants to edit&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin:0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color:#0000ff;"&gt;If&lt;/span&gt; e.Button = Windows.Forms.MouseButtons.Right &lt;span style="color:#0000ff;"&gt;Then&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin:0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color:#008000;"&gt;&amp;#39;&amp;nbsp; Identify the selected ListViewItem&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin:0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; ItemSelected = LVMVPs.GetItemAt(e.X, e.Y)&lt;/p&gt;
&lt;p style="margin:0px;"&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style="margin:0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color:#008000;"&gt;&amp;#39; Display in TextBoxes to allow editing&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin:0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color:#0000ff;"&gt;If&lt;/span&gt; (ItemSelected &lt;span style="color:#0000ff;"&gt;IsNot&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;Nothing&lt;/span&gt;) &lt;span style="color:#0000ff;"&gt;Then&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin:0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; TextBox1.Text = (ItemSelected.SubItems(0).Text)&lt;/p&gt;
&lt;p style="margin:0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; TextBox2.Text = (ItemSelected.SubItems(1).Text)&lt;/p&gt;
&lt;p style="margin:0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; TextBox3.Text = (ItemSelected.SubItems(2).Text)&lt;/p&gt;
&lt;p style="margin:0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color:#0000ff;"&gt;End&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;If&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin:0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color:#0000ff;"&gt;End&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;If&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin:0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color:#0000ff;"&gt;End&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;Sub&lt;/span&gt;&lt;/p&gt;
&lt;/div&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;As you can see, it first tests that the Right mouse button has been clicked and if it has then each of the sub items is pasted into an individual TextBox below. The key feature in this block of code is the GetItemAt method of the ListView. This is the magic ingredient that allows you to easily identify exactly which row the user wants to deal with (and if you&amp;#39;ve spent a lot of fruitless time trying to work out how to use other ListView selection methods, you&amp;#39;ll be pleased that you landed here!). Note that ItemSelected (the variable I am using to hold the current selection) is a ListViewItem object, not an index number - which is where most people seem to get caught.&lt;/p&gt;
&lt;p&gt;The Confirm code is also very simple.&amp;nbsp;&lt;/p&gt;
&lt;div style="font-family:Courier New;font-size:10pt;color:black;background:white;"&gt;
&lt;p style="margin:0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color:#0000ff;"&gt;Private&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;Sub&lt;/span&gt; btnConfirm_Click(&lt;span style="color:#0000ff;"&gt;ByVal&lt;/span&gt; sender &lt;span style="color:#0000ff;"&gt;As&lt;/span&gt; System.Object, &lt;span style="color:#0000ff;"&gt;ByVal&lt;/span&gt; e &lt;span style="color:#0000ff;"&gt;As&lt;/span&gt; System.EventArgs) &lt;span style="color:#0000ff;"&gt;Handles&lt;/span&gt; btnConfirm.Click&lt;/p&gt;
&lt;p style="margin:0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color:#008000;"&gt;&amp;#39;&amp;nbsp; Update ListView&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin:0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; ItemSelected.SubItems(0).Text = TextBox1.Text&lt;/p&gt;
&lt;p style="margin:0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; ItemSelected.SubItems(1).Text = TextBox2.Text&lt;/p&gt;
&lt;p style="margin:0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; ItemSelected.SubItems(2).Text = TextBox3.Text&lt;/p&gt;
&lt;p style="margin:0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color:#008000;"&gt;&amp;#39;&amp;nbsp; Avoid confusion by clearing TextBoxes&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin:0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; TextBox1.Clear()&lt;/p&gt;
&lt;p style="margin:0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; TextBox2.Clear()&lt;/p&gt;
&lt;p style="margin:0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; TextBox3.Clear()&lt;/p&gt;
&lt;p style="margin:0px;"&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style="margin:0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color:#0000ff;"&gt;End&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;Sub&lt;/span&gt;&lt;/p&gt;
&lt;/div&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;The content of each TextBox is transferred back to the relevant ListView sub item (regardless of whether it has been changed - although you could of course build in a filter here if you wanted to). The TextBoxes are then cleared.&lt;/p&gt;
&lt;p&gt;And for a simple project, that&amp;#39;s really all there is to it. As you can see, I did also add a button to clear the ListView, but that was just for my own convenience, so I could test multiple consecutive edits without duplicating the data in the file.&amp;nbsp;&lt;/p&gt;
&lt;div style="font-family:Courier New;font-size:10pt;color:black;background:white;"&gt;
&lt;p style="margin:0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color:#0000ff;"&gt;Private&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;Sub&lt;/span&gt; Button1_Click(&lt;span style="color:#0000ff;"&gt;ByVal&lt;/span&gt; sender &lt;span style="color:#0000ff;"&gt;As&lt;/span&gt; System.Object, &lt;span style="color:#0000ff;"&gt;ByVal&lt;/span&gt; e &lt;span style="color:#0000ff;"&gt;As&lt;/span&gt; System.EventArgs) &lt;span style="color:#0000ff;"&gt;Handles&lt;/span&gt; Button1.Click&lt;/p&gt;
&lt;p style="margin:0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; LVMVPs.Clear()&lt;/p&gt;
&lt;p style="margin:0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color:#0000ff;"&gt;End&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;Sub&lt;/span&gt;&lt;/p&gt;
&lt;/div&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;Not so obviously, I did also make a change to the file save code. I wanted to ensure that there wasn&amp;#39;t a new blank line at the end of the text file, which might have caused a problem, so I tweaked the btnSave Click event as shown below:&amp;nbsp;&lt;/p&gt;
&lt;div style="font-family:Courier New;font-size:10pt;color:black;background:white;"&gt;
&lt;p style="margin:0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color:#0000ff;"&gt;Private&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;Sub&lt;/span&gt; btnSave_Click(&lt;span style="color:#0000ff;"&gt;ByVal&lt;/span&gt; sender &lt;span style="color:#0000ff;"&gt;As&lt;/span&gt; System.Object, &lt;span style="color:#0000ff;"&gt;ByVal&lt;/span&gt; e &lt;span style="color:#0000ff;"&gt;As&lt;/span&gt; System.EventArgs) &lt;span style="color:#0000ff;"&gt;Handles&lt;/span&gt; btnSave.Click&lt;/p&gt;
&lt;p style="margin:0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color:#008000;"&gt;&amp;#39;&amp;nbsp; Create FileStream and StreamWriter to access and write to file&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin:0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color:#0000ff;"&gt;Dim&lt;/span&gt; FS &lt;span style="color:#0000ff;"&gt;As&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;New&lt;/span&gt; FileStream(TextFile, FileMode.OpenOrCreate, FileAccess.ReadWrite, FileShare.ReadWrite)&lt;/p&gt;
&lt;p style="margin:0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color:#0000ff;"&gt;Dim&lt;/span&gt; SW &lt;span style="color:#0000ff;"&gt;As&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;New&lt;/span&gt; StreamWriter(FS)&lt;/p&gt;
&lt;p style="margin:0px;"&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style="margin:0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color:#0000ff;"&gt;Try&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin:0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color:#008000;"&gt;&amp;#39;&amp;nbsp; Loop through all rows&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin:0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color:#0000ff;"&gt;For&lt;/span&gt; Index &lt;span style="color:#0000ff;"&gt;As&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;Integer&lt;/span&gt; = 0 &lt;span style="color:#0000ff;"&gt;To&lt;/span&gt; LVMVPs.Items.Count - 1&lt;/p&gt;
&lt;p style="margin:0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color:#008000;"&gt;&amp;#39;&amp;nbsp; Internally loop through all columns, gathering items&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin:0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color:#0000ff;"&gt;For&lt;/span&gt; SubIndex &lt;span style="color:#0000ff;"&gt;As&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;Integer&lt;/span&gt; = 0 &lt;span style="color:#0000ff;"&gt;To&lt;/span&gt; LVMVPs.Items(Index).SubItems.Count - 1&lt;/p&gt;
&lt;p style="margin:0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; SW.Write(LVMVPs.Items(Index).SubItems(SubIndex).Text &amp;amp; Chr(9))&lt;/p&gt;
&lt;p style="margin:0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color:#0000ff;"&gt;Next&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin:0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color:#008000;"&gt;&amp;#39;&amp;nbsp; Create new line ready for next row&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin:0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color:#008000;"&gt;&amp;#39;&amp;nbsp; except for final entry&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin:0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color:#0000ff;"&gt;If&lt;/span&gt; Index = LVMVPs.Items.Count - 1 &lt;span style="color:#0000ff;"&gt;Then&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin:0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color:#0000ff;"&gt;Exit&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;For&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin:0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color:#0000ff;"&gt;Else&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin:0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; SW.Write(Environment.NewLine)&lt;/p&gt;
&lt;p style="margin:0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color:#0000ff;"&gt;End&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;If&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin:0px;"&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style="margin:0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color:#0000ff;"&gt;Next&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin:0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color:#0000ff;"&gt;Catch&lt;/span&gt; ex &lt;span style="color:#0000ff;"&gt;As&lt;/span&gt; Exception&lt;/p&gt;
&lt;p style="margin:0px;"&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style="margin:0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; MsgBox(&lt;span style="color:#a31515;"&gt;&amp;quot;Error saving to file.&amp;quot;&lt;/span&gt; &amp;amp; ex.Message)&lt;/p&gt;
&lt;p style="margin:0px;"&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style="margin:0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color:#0000ff;"&gt;Finally&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin:0px;"&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style="margin:0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; SW.Close()&lt;/p&gt;
&lt;p style="margin:0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; FS.Close()&lt;/p&gt;
&lt;p style="margin:0px;"&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style="margin:0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color:#0000ff;"&gt;End&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;Try&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin:0px;"&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style="margin:0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color:#0000ff;"&gt;End&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;Sub&lt;/span&gt;&lt;/p&gt;
&lt;/div&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;To avoid errors when there is no data in the TextBoxes, you might also want to disable and enable the Confirm button when appropriate. The sample project which you can download &lt;a href="http://www.xtabvbcity.plus.com/Blogs/ListViewAndFile.zip" class="null"&gt;from here&lt;/a&gt;, includes this feature.&amp;nbsp; &lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://cs.vbcity.com/aggbug.aspx?PostID=254" width="1" height="1"&gt;</description><category domain="http://cs.vbcity.com/blogs/xtab/archive/tags/ListView/default.aspx">ListView</category><category domain="http://cs.vbcity.com/blogs/xtab/archive/tags/Visual+Basic/default.aspx">Visual Basic</category><category domain="http://cs.vbcity.com/blogs/xtab/archive/tags/Windows++Forms/default.aspx">Windows  Forms</category></item><item><title>XML, take 4</title><link>http://cs.vbcity.com/blogs/larryblake/archive/2009/10/28/xml-take-4.aspx</link><pubDate>Wed, 28 Oct 2009 15:49:00 GMT</pubDate><guid isPermaLink="false">921a0936-6df9-4a08-8006-68f3b1747f32:267</guid><dc:creator>LarryBlake</dc:creator><slash:comments>0</slash:comments><description>&lt;p&gt;I just got a note from Visual Basic MVP Steele Price, who pointed out a fourth way of writing XML.&amp;nbsp; Unlike the three in my last post, this method will not work in C#.&lt;/p&gt;
&lt;p&gt;As I should have mentioned, VB allows you to put XML directly in your code, which is great if you don&amp;#39;t need to do a lot of dynamic modification to the XML.&amp;nbsp; Now with LINQ, you can also insert variables, using a syntax resembling Classic ASP.&lt;/p&gt;
&lt;p&gt;Since Steele was nice enough to send me a good example, I&amp;#39;ll just post his.&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-family:&amp;#39;Bitstream Vera Sans Mono&amp;#39;;font-size:12pt;"&gt;&lt;span style="background-color:#c0c0c0;"&gt;&lt;span style="color:blue;"&gt;Sub&lt;/span&gt; xml5(&lt;span style="color:blue;"&gt;ByVal&lt;/span&gt; peoplepairs &lt;span style="color:blue;"&gt;As&lt;/span&gt; &lt;span style="color:#2b91af;"&gt;IList&lt;/span&gt;(&lt;span style="color:blue;"&gt;Of&lt;/span&gt; &lt;span style="color:#2b91af;"&gt;KeyValuePair&lt;/span&gt;(&lt;span style="color:blue;"&gt;Of&lt;/span&gt; &lt;span style="color:blue;"&gt;Integer&lt;/span&gt;, &lt;span style="color:blue;"&gt;String&lt;/span&gt;)))&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family:&amp;#39;Bitstream Vera Sans Mono&amp;#39;;font-size:12pt;"&gt;&lt;span style="background-color:#c0c0c0;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color:green;"&gt;&lt;span style="background-color:#c0c0c0;"&gt;&amp;#39;convert the List to XML&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family:&amp;#39;Bitstream Vera Sans Mono&amp;#39;;font-size:12pt;"&gt;&lt;span style="background-color:#c0c0c0;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color:blue;"&gt;&lt;span style="background-color:#c0c0c0;"&gt;Try&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family:&amp;#39;Bitstream Vera Sans Mono&amp;#39;;font-size:12pt;"&gt;&lt;span style="background-color:#c0c0c0;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color:blue;"&gt;Dim&lt;/span&gt; thelist = _&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family:&amp;#39;Bitstream Vera Sans Mono&amp;#39;;font-size:12pt;"&gt;&lt;span style="background-color:#c0c0c0;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color:#6464b9;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#844646;"&gt;People&lt;/span&gt;&lt;/span&gt;&lt;span style="color:#6464b9;"&gt;&lt;span style="background-color:#c0c0c0;"&gt;&amp;gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family:&amp;#39;Bitstream Vera Sans Mono&amp;#39;;color:#555555;font-size:12pt;"&gt;&lt;span style="background-color:#c0c0c0;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="background:yellow;mso-highlight:yellow;"&gt;&amp;lt;%=&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family:&amp;#39;Bitstream Vera Sans Mono&amp;#39;;font-size:12pt;"&gt;&lt;span style="background-color:#c0c0c0;"&gt; &lt;span style="color:blue;"&gt;From&lt;/span&gt; p &lt;span style="color:blue;"&gt;In&lt;/span&gt; peoplepairs _&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family:&amp;#39;Bitstream Vera Sans Mono&amp;#39;;font-size:12pt;"&gt;&lt;span style="background-color:#c0c0c0;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color:blue;"&gt;Select&lt;/span&gt; _&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family:&amp;#39;Bitstream Vera Sans Mono&amp;#39;;font-size:12pt;"&gt;&lt;span style="background-color:#c0c0c0;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color:#6464b9;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#844646;"&gt;Person&lt;/span&gt; &lt;span style="color:#b96464;"&gt;id&lt;/span&gt;&lt;span style="color:#6464b9;"&gt;=&lt;/span&gt;&lt;span style="background:yellow;color:#555555;mso-highlight:yellow;"&gt;&amp;lt;%=&lt;/span&gt; p.Key.ToString &lt;span style="background:yellow;color:#555555;mso-highlight:yellow;"&gt;%&amp;gt;&lt;/span&gt;&lt;span style="color:#6464b9;"&gt;&amp;gt;&lt;/span&gt;&lt;span style="background:yellow;color:#555555;mso-highlight:yellow;"&gt;&amp;lt;%=&lt;/span&gt; p.Value &lt;span style="background:yellow;color:#555555;mso-highlight:yellow;"&gt;%&amp;gt;&lt;/span&gt;&lt;span style="color:#6464b9;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#844646;"&gt;Person&lt;/span&gt;&lt;span style="color:#6464b9;"&gt;&amp;gt;&lt;/span&gt; &lt;/span&gt;&lt;span style="background:yellow;color:#555555;mso-highlight:yellow;"&gt;&lt;span style="background-color:#c0c0c0;"&gt;%&amp;gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="background-color:#c0c0c0;"&gt;&lt;span style="font-family:&amp;#39;Bitstream Vera Sans Mono&amp;#39;;color:#555555;font-size:12pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="font-family:&amp;#39;Bitstream Vera Sans Mono&amp;#39;;color:#6464b9;font-size:12pt;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="font-family:&amp;#39;Bitstream Vera Sans Mono&amp;#39;;color:#844646;font-size:12pt;"&gt;People&lt;/span&gt;&lt;span style="font-family:&amp;#39;Bitstream Vera Sans Mono&amp;#39;;color:#6464b9;font-size:12pt;"&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-family:&amp;#39;Bitstream Vera Sans Mono&amp;#39;;font-size:12pt;"&gt;&lt;span style="background-color:#c0c0c0;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color:green;"&gt;&lt;span style="background-color:#c0c0c0;"&gt;&amp;#39; Start document and write header&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family:&amp;#39;Bitstream Vera Sans Mono&amp;#39;;font-size:12pt;"&gt;&lt;span style="background-color:#c0c0c0;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color:blue;"&gt;Dim&lt;/span&gt; xd &lt;span style="color:blue;"&gt;As&lt;/span&gt; &lt;span style="color:blue;"&gt;New&lt;/span&gt; &lt;span style="color:#2b91af;"&gt;XDocument&lt;/span&gt;(&lt;span style="color:blue;"&gt;New&lt;/span&gt; &lt;span style="color:#2b91af;"&gt;XDeclaration&lt;/span&gt;(&lt;span style="color:#a31515;"&gt;&amp;quot;1.0&amp;quot;&lt;/span&gt;, &lt;span style="color:#a31515;"&gt;&amp;quot;UTF-8&amp;quot;&lt;/span&gt;, &lt;span style="color:#a31515;"&gt;&amp;quot;yes&amp;quot;&lt;/span&gt;), thelist)&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-family:&amp;#39;Bitstream Vera Sans Mono&amp;#39;;font-size:12pt;"&gt;&lt;span style="background-color:#c0c0c0;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color:blue;"&gt;&lt;span style="background-color:#c0c0c0;"&gt;Try&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family:&amp;#39;Bitstream Vera Sans Mono&amp;#39;;font-size:12pt;"&gt;&lt;span style="background-color:#c0c0c0;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color:green;"&gt;&lt;span style="background-color:#c0c0c0;"&gt;&amp;#39;Save the file&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family:&amp;#39;Bitstream Vera Sans Mono&amp;#39;;font-size:12pt;"&gt;&lt;span style="background-color:#c0c0c0;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; xd.Save(&lt;span style="color:#a31515;"&gt;&amp;quot;MyXML.xml&amp;quot;&lt;/span&gt;)&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-family:&amp;#39;Bitstream Vera Sans Mono&amp;#39;;font-size:12pt;"&gt;&lt;span style="background-color:#c0c0c0;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color:blue;"&gt;Catch&lt;/span&gt; ex2 &lt;span style="color:blue;"&gt;As&lt;/span&gt; &lt;/span&gt;&lt;span style="color:#2b91af;"&gt;&lt;span style="background-color:#c0c0c0;"&gt;Exception&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family:&amp;#39;Bitstream Vera Sans Mono&amp;#39;;font-size:12pt;"&gt;&lt;span style="background-color:#c0c0c0;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color:green;"&gt;&lt;span style="background-color:#c0c0c0;"&gt;&amp;#39;do something here if the save fails&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family:&amp;#39;Bitstream Vera Sans Mono&amp;#39;;font-size:12pt;"&gt;&lt;span style="background-color:#c0c0c0;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color:blue;"&gt;End&lt;/span&gt; &lt;span style="color:blue;"&gt;Try&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-family:&amp;#39;Bitstream Vera Sans Mono&amp;#39;;font-size:12pt;"&gt;&lt;span style="background-color:#c0c0c0;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color:blue;"&gt;Catch&lt;/span&gt; ex1 &lt;span style="color:blue;"&gt;As&lt;/span&gt; &lt;/span&gt;&lt;span style="color:#2b91af;"&gt;&lt;span style="background-color:#c0c0c0;"&gt;Exception&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family:&amp;#39;Bitstream Vera Sans Mono&amp;#39;;font-size:12pt;"&gt;&lt;span style="background-color:#c0c0c0;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color:green;"&gt;&lt;span style="background-color:#c0c0c0;"&gt;&amp;#39;do something here if the conversion fails&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family:&amp;#39;Bitstream Vera Sans Mono&amp;#39;;font-size:12pt;"&gt;&lt;span style="background-color:#c0c0c0;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color:blue;"&gt;End&lt;/span&gt; &lt;/span&gt;&lt;span style="color:blue;"&gt;&lt;span style="background-color:#c0c0c0;"&gt;Try&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family:&amp;#39;Bitstream Vera Sans Mono&amp;#39;;font-size:12pt;"&gt;&lt;span style="background-color:#c0c0c0;"&gt;&lt;span style="color:blue;"&gt;End&lt;/span&gt; &lt;span style="color:blue;"&gt;Sub&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-family:&amp;#39;Bitstream Vera Sans Mono&amp;#39;;font-size:12pt;"&gt;&lt;span style="color:blue;"&gt;&lt;span style="color:#000000;"&gt;There&amp;#39;s always more ways to skin the cat.&amp;nbsp; Steele&amp;#39;s website is &lt;a href="http://blog.steeleprice.net/"&gt;http://blog.steeleprice.net/&lt;/a&gt;&amp;nbsp;.&amp;nbsp; Thanks!&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://cs.vbcity.com/aggbug.aspx?PostID=267" width="1" height="1"&gt;</description></item><item><title>WPF: How To Move Controls and Elements At Runtime</title><link>http://cs.vbcity.com/blogs/xtab/archive/2009/10/26/wpf-how-to-move-elements-at-runtime.aspx</link><pubDate>Mon, 26 Oct 2009 22:16:00 GMT</pubDate><guid isPermaLink="false">921a0936-6df9-4a08-8006-68f3b1747f32:250</guid><dc:creator>XTab</dc:creator><slash:comments>0</slash:comments><description>&lt;p&gt;&lt;span style="font-family:Calibri;"&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;XAML is brilliant for creating user interfaces at design time, but if you need to make changes dynamically at runtime, this can sometimes be a problem. To take an example, let&amp;#39;s say that you need to allow an Image to move to a different location on screen in response to some user action. &lt;/p&gt;
&lt;p&gt;To demonstrate this, we can use an Image which is housed in a Canvas. So the first step is to create a Canvas in a WPF Window, place the Image inside the Canvas and assign a value to the Source property of the Image:&amp;nbsp;&amp;nbsp;&lt;/p&gt;
&lt;div style="font-family:Courier New;font-size:10pt;color:black;background:white;"&gt;
&lt;p style="margin:0px;"&gt;&lt;span style="color:#0000ff;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#a31515;"&gt;Window&lt;/span&gt;&lt;span style="color:#ff0000;"&gt; x&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;:&lt;/span&gt;&lt;span style="color:#ff0000;"&gt;Class&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&amp;quot;Window2&amp;quot;&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin:0px;"&gt;&amp;nbsp;&amp;nbsp; &lt;span style="color:#ff0000;"&gt;xmlns&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&amp;quot;http://schemas.microsoft.com/winfx/2006/xaml/presentation&amp;quot;&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin:0px;"&gt;&amp;nbsp;&amp;nbsp; &lt;span style="color:#ff0000;"&gt;xmlns&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;:&lt;/span&gt;&lt;span style="color:#ff0000;"&gt;x&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&amp;quot;http://schemas.microsoft.com/winfx/2006/xaml&amp;quot;&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin:0px;"&gt;&amp;nbsp;&amp;nbsp; &lt;span style="color:#ff0000;"&gt;Title&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&amp;quot;Image In A Canvas&amp;quot;&lt;/span&gt;&lt;span style="color:#ff0000;"&gt; Height&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&amp;quot;300&amp;quot;&lt;/span&gt;&lt;span style="color:#ff0000;"&gt; Width&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&amp;quot;300&amp;quot;&amp;gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin:0px;"&gt;&lt;span style="color:#a31515;"&gt;&amp;nbsp; &lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#a31515;"&gt;Canvas&lt;/span&gt;&lt;span style="color:#ff0000;"&gt; x&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;:&lt;/span&gt;&lt;span style="color:#ff0000;"&gt;Name&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&amp;quot;MainCanvas&amp;quot;&amp;gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin:0px;"&gt;&lt;span style="color:#a31515;"&gt;&amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#a31515;"&gt;Image&lt;/span&gt;&lt;span style="color:#ff0000;"&gt; x&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;:&lt;/span&gt;&lt;span style="color:#ff0000;"&gt;Name&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&amp;quot;MoveableImage&amp;quot;&lt;/span&gt;&lt;span style="color:#ff0000;"&gt; Width&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&amp;quot;55&amp;quot;&lt;/span&gt;&lt;span style="color:#ff0000;"&gt; Source&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&amp;quot;questionmark2.jpg&amp;quot; /&amp;gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin:0px;"&gt;&lt;span style="color:#a31515;"&gt;&amp;nbsp; &lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#a31515;"&gt;Canvas&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&amp;gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin:0px;"&gt;&lt;span style="color:#0000ff;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#a31515;"&gt;Window&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&amp;gt;&lt;/span&gt;&lt;/p&gt;
&lt;/div&gt;
&lt;p&gt;&amp;nbsp;We can then have the Image move a few units to the right each time it receives a mouse click. The WPF Image doesn&amp;#39;t support the Click event, but MouseDown is available for the same purpose. So the next step is to wire up an event handler for this:&lt;/p&gt;
&lt;div style="font-family:Courier New;font-size:10pt;color:black;background:white;"&gt;
&lt;p style="margin:0px;"&gt;&lt;span style="color:#a31515;"&gt;&amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#a31515;"&gt;Image&lt;/span&gt;&lt;span style="color:#ff0000;"&gt; x&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;:&lt;/span&gt;&lt;span style="color:#ff0000;"&gt;Name&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&amp;quot;MoveableImage&amp;quot;&lt;/span&gt;&lt;span style="color:#ff0000;"&gt; Width&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&amp;quot;55&amp;quot;&lt;/span&gt;&lt;span style="color:#ff0000;"&gt; Source&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&amp;quot;questionmark2.jpg&amp;quot;&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin:0px;"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span style="color:#ff0000;"&gt;MouseDown&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&amp;quot;Image_MouseDown&amp;quot;&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;/&amp;gt;&lt;/span&gt;&lt;/p&gt;
&lt;/div&gt;
&lt;p&gt;Here&amp;#39;s the first pass at the Image_MouseDown event in the code-behind to move the Image 10 units to the right on each mouse down:&lt;/p&gt;
&lt;div style="font-family:Courier New;font-size:10pt;color:black;background:white;"&gt;
&lt;p style="margin:0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color:#0000ff;"&gt;Private&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;Sub&lt;/span&gt; Image_MouseDown(&lt;span style="color:#0000ff;"&gt;ByVal&lt;/span&gt; sender &lt;span style="color:#0000ff;"&gt;As&lt;/span&gt; System.Object, &lt;span style="color:#0000ff;"&gt;ByVal&lt;/span&gt; e &lt;span style="color:#0000ff;"&gt;As&lt;/span&gt; System.Windows.Input.MouseButtonEventArgs)&lt;/p&gt;
&lt;p style="margin:0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color:#0000ff;"&gt;Dim&lt;/span&gt; LeftPos &lt;span style="color:#0000ff;"&gt;As&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;Double&lt;/span&gt; = MoveableImage.GetValue(Canvas.LeftProperty)&lt;/p&gt;
&lt;p style="margin:0px;"&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style="margin:0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; MoveableImage.SetValue(Canvas.LeftProperty, LeftPos + 10)&lt;/p&gt;
&lt;p style="margin:0px;"&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style="margin:0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color:#0000ff;"&gt;End&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;Sub&lt;/span&gt;&lt;/p&gt;
&lt;/div&gt;
&lt;p&gt;This seems straightforward enough, doesn&amp;#39;t it? The variable named LeftPos reads the value that is currently stored as the attached Canvas.Left property of the Image, then it increments that value by 10. If you were to run this project, you would expect that the Image would jump 10 units to the right when the mouse is clicked on it. But if you try this code, you will find that nothing happens when the Image is clicked. &lt;/p&gt;
&lt;p&gt;There&amp;#39;s a little WPF Gotcha lurking in the canvas, just waiting to confuse you. When you create this layout, as you can see from the screenshot below, the Image appears in the top left hand corner of the Canvas by default: &lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;img src="http://www.xtabvbcity.plus.com/Blogs/Blog_GetValue01.png" alt="" /&gt;&lt;/p&gt;
&lt;p&gt;You would be forgiven for assuming that the attached Canvas.Left and Canvas.Top values of the Image are set to zero. It&amp;#39;s a reasonable assumption to make, especially as you can see the Image in exactly that location. However, it doesn&amp;#39;t actually work like that. By default the Left and Top attached properties are in fact set to Double.NaN - Not A Number. This is effectively a null value that is assigned in order to allow the Canvas to make use of its own built-in layout intelligence for more complex scenarios. &lt;/p&gt;
&lt;p&gt;The fix is simple - you just have to assign values to the Canvas.Left and Canvas.Top properties in the XAML when you create the Image element, but it&amp;#39;s something that isn&amp;#39;t obvious. Not only does it mean that the expected movement of the Image doesn&amp;#39;t happen, but it will actually cause your application to crash if you try and reset the value in code to move the Image back to the start position (which we will do later).&lt;/p&gt;
&lt;p&gt;So, here&amp;#39;s the amended XAML for the Image:&amp;nbsp;&lt;/p&gt;
&lt;div style="font-family:Courier New;font-size:10pt;color:black;background:white;"&gt;
&lt;p style="margin:0px;"&gt;&lt;span style="color:#a31515;"&gt;&amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#a31515;"&gt;Image&lt;/span&gt;&lt;span style="color:#ff0000;"&gt; x&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;:&lt;/span&gt;&lt;span style="color:#ff0000;"&gt;Name&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&amp;quot;MoveableImage&amp;quot;&lt;/span&gt;&lt;span style="color:#ff0000;"&gt; Width&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&amp;quot;55&amp;quot;&lt;/span&gt;&lt;span style="color:#ff0000;"&gt; Source&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&amp;quot;questionmark2.jpg&amp;quot;&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin:0px;"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span style="color:#ff0000;"&gt;MouseDown&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&amp;quot;Image_MouseDown&amp;quot;&lt;/span&gt; &lt;/p&gt;
&lt;p style="margin:0px;"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span style="color:#ff0000;"&gt;Canvas.Left&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&amp;quot;0&amp;quot;&lt;/span&gt;&lt;span style="color:#ff0000;"&gt; Canvas.Top&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&amp;quot;0&amp;quot; /&amp;gt;&lt;/span&gt;&amp;nbsp;&lt;/p&gt;
&lt;/div&gt;
&lt;p&gt;With that change in place, the Image will now move when it is clicked. &lt;/p&gt;
&lt;p&gt;In this kind of situation, you probably won&amp;#39;t want the Image to either get stuck at the right hand side of the Canvas or, possibly even worse, move out of sight. A simple If/Then statement will fix this:&amp;nbsp;&lt;/p&gt;
&lt;div style="font-family:Courier New;font-size:10pt;color:black;background:white;"&gt;
&lt;p style="margin:0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color:#0000ff;"&gt;If&lt;/span&gt; LeftPos &amp;lt; (MainCanvas.ActualWidth - MoveableImage.Width) &lt;span style="color:#0000ff;"&gt;Then&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin:0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; MoveableImage.SetValue(Canvas.LeftProperty, LeftPos + 10)&lt;/p&gt;
&lt;p style="margin:0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color:#0000ff;"&gt;Else&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin:0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; MoveableImage.SetValue(Canvas.LeftProperty, &lt;span style="color:#0000ff;"&gt;CDbl&lt;/span&gt;(0))&lt;/p&gt;
&lt;p style="margin:0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color:#0000ff;"&gt;End&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;If&lt;/span&gt;&amp;nbsp;&lt;/p&gt;
&lt;/div&gt;
&lt;p&gt;As you can see, the first line tests if there is still enough width remaining for the Image to be moved 10 elements to the right and still be visible. If there is, then the 10 unit jump takes place. If not, then the Image is shunted back to far left of the Canvas. Note that this will fail if you haven&amp;#39;t set the initial value of the Canvas.Left property as described earlier. &lt;/p&gt;
&lt;p&gt;It will also fail if you don&amp;#39;t cast the value (in this example, zero) to a Double. This is because the second parameter of the SetValue method is a generic Object Type and the Canvas.Left property requires a Double.&lt;/p&gt;
&lt;p&gt;Moving the Image downwards follows the same kind of logic. You set an initial value on the Canvas.Top property then increment this when the MouseDown event fires. Perhaps you want to build in a feature where the left mouse button causes the Image to move left and the right mouse button to move it down. &lt;/p&gt;
&lt;p&gt;If you are moving from Windows Forms to WPF, you may expect to find the Button property of the MouseEventArgs. You would then use code along the lines of:&lt;/p&gt;
&lt;div style="font-family:Courier New;font-size:10pt;color:black;background:white;"&gt;
&lt;p style="margin:0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color:#0000ff;"&gt;If&lt;/span&gt; e.Button = Windows.Forms.MouseButtons.Left &lt;span style="color:#0000ff;"&gt;Then&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin:0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color:#008000;"&gt;&amp;#39; Do Something&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin:0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color:#0000ff;"&gt;End&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;If&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin:0px;"&gt;&lt;span style="color:#0000ff;"&gt;&lt;/span&gt;&lt;/p&gt;
&lt;/div&gt;
&lt;p&gt;WPF is (again) slightly different. It uses the System.Windows.Input.MouseButtonEventArgs class in place of the Windows Forms version and it has a ChangedButton property, not a Button property. So the WPF version of the previous snippet will start with:&amp;nbsp;&lt;/p&gt;
&lt;div style="font-family:Courier New;font-size:10pt;color:black;background:white;"&gt;
&lt;p style="margin:0px;"&gt;&amp;nbsp;&lt;span style="color:#0000ff;"&gt;If&lt;/span&gt; e.ChangedButton = MouseButton.Left &lt;span style="color:#0000ff;"&gt;Then&lt;/span&gt;&amp;nbsp;&lt;/p&gt;
&lt;/div&gt;
&lt;p&gt;The following code snippet combines the use of either the left or right mouse button to move the Image left or down respectively:&lt;/p&gt;
&lt;div style="font-family:Courier New;font-size:10pt;color:black;background:white;"&gt;
&lt;p style="margin:0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color:#0000ff;"&gt;Private&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;Sub&lt;/span&gt; Image_MouseDown(&lt;span style="color:#0000ff;"&gt;ByVal&lt;/span&gt; sender &lt;span style="color:#0000ff;"&gt;As&lt;/span&gt; System.Object, &lt;span style="color:#0000ff;"&gt;ByVal&lt;/span&gt; e &lt;span style="color:#0000ff;"&gt;As&lt;/span&gt; System.Windows.Input.MouseButtonEventArgs)&lt;/p&gt;
&lt;p style="margin:0px;"&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style="margin:0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color:#0000ff;"&gt;If&lt;/span&gt; e.ChangedButton = MouseButton.Left &lt;span style="color:#0000ff;"&gt;Then&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin:0px;"&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style="margin:0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color:#0000ff;"&gt;Dim&lt;/span&gt; LeftPos &lt;span style="color:#0000ff;"&gt;As&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;Double&lt;/span&gt; = MoveableImage.GetValue(Canvas.LeftProperty)&lt;/p&gt;
&lt;p style="margin:0px;"&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style="margin:0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color:#0000ff;"&gt;If&lt;/span&gt; LeftPos &amp;lt; (MainCanvas.ActualWidth - MoveableImage.Width) &lt;span style="color:#0000ff;"&gt;Then&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin:0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; MoveableImage.SetValue(Canvas.LeftProperty, LeftPos + 10)&lt;/p&gt;
&lt;p style="margin:0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color:#0000ff;"&gt;Else&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin:0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; MoveableImage.SetValue(Canvas.LeftProperty, &lt;span style="color:#0000ff;"&gt;CDbl&lt;/span&gt;(0))&lt;/p&gt;
&lt;p style="margin:0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color:#0000ff;"&gt;End&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;If&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin:0px;"&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style="margin:0px;"&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style="margin:0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color:#0000ff;"&gt;ElseIf&lt;/span&gt; e.ChangedButton = MouseButton.Right &lt;span style="color:#0000ff;"&gt;Then&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin:0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color:#0000ff;"&gt;Dim&lt;/span&gt; TopPos &lt;span style="color:#0000ff;"&gt;As&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;Double&lt;/span&gt; = MoveableImage.GetValue(Canvas.TopProperty)&lt;/p&gt;
&lt;p style="margin:0px;"&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style="margin:0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color:#0000ff;"&gt;If&lt;/span&gt; TopPos &amp;lt; (MainCanvas.ActualHeight - MoveableImage.Width) &lt;span style="color:#0000ff;"&gt;Then&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin:0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; MoveableImage.SetValue(Canvas.TopProperty, TopPos + 10)&lt;/p&gt;
&lt;p style="margin:0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color:#0000ff;"&gt;Else&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin:0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; MoveableImage.SetValue(Canvas.TopProperty, &lt;span style="color:#0000ff;"&gt;CDbl&lt;/span&gt;(0))&lt;/p&gt;
&lt;p style="margin:0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color:#0000ff;"&gt;End&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;If&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin:0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color:#0000ff;"&gt;End&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;If&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin:0px;"&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style="margin:0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color:#0000ff;"&gt;End&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;Sub&lt;/span&gt;&lt;/p&gt;
&lt;/div&gt;
&lt;p&gt;Finally, of course, you can combine the horizontal and vertical movement of the Image - maybe by using the Middle mouse button:&lt;/p&gt;
&lt;div style="font-family:Courier New;font-size:10pt;color:black;background:white;"&gt;
&lt;p style="margin:0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color:#0000ff;"&gt;ElseIf&lt;/span&gt; e.ChangedButton = MouseButton.Middle &lt;span style="color:#0000ff;"&gt;Then&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin:0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; MoveableImage.SetValue(Canvas.LeftProperty, MoveableImage.GetValue(Canvas.LeftProperty) + 10)&lt;/p&gt;
&lt;p style="margin:0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; MoveableImage.SetValue(Canvas.TopProperty, MoveableImage.GetValue(Canvas.TopProperty) + 10)&lt;/p&gt;
&lt;p style="margin:0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color:#0000ff;"&gt;End&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;If&lt;/span&gt;&lt;/p&gt;
&lt;/div&gt;
&lt;p&gt;The above snippet can be expanded to have the tests for reaching the outer edges built in also.&lt;/p&gt;
&lt;p&gt;The main issues I particularly wanted to cover in this blog item were the GetValue and SetValue methods, which are a very useful tool in these kind of situations. I also wanted to flag up the various WPF Gotchas that might trip up the unwary WinForms developer. In a follow-up blog, I plan to take this task a step further and look at ways of giving the user several ways of achieving the Image movement - all of which loop back to a single piece of code &lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://cs.vbcity.com/aggbug.aspx?PostID=250" width="1" height="1"&gt;</description><category domain="http://cs.vbcity.com/blogs/xtab/archive/tags/WPF/default.aspx">WPF</category><category domain="http://cs.vbcity.com/blogs/xtab/archive/tags/Visual+Basic/default.aspx">Visual Basic</category><category domain="http://cs.vbcity.com/blogs/xtab/archive/tags/GetValue/default.aspx">GetValue</category><category domain="http://cs.vbcity.com/blogs/xtab/archive/tags/SetValue/default.aspx">SetValue</category><category domain="http://cs.vbcity.com/blogs/xtab/archive/tags/Canvas/default.aspx">Canvas</category></item><item><title>Populating a WinForms ListView from a Text File</title><link>http://cs.vbcity.com/blogs/xtab/archive/2009/10/25/populating-a-winforms-listview-from-a-text-file.aspx</link><pubDate>Sun, 25 Oct 2009 16:20:00 GMT</pubDate><guid isPermaLink="false">921a0936-6df9-4a08-8006-68f3b1747f32:252</guid><dc:creator>XTab</dc:creator><slash:comments>0</slash:comments><description>&lt;p&gt;&lt;span style="font-family:Calibri;"&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;The Windows Forms ListView is designed to display data. You can use a simple text file as the data source of a Windows Forms ListView. Let&amp;#39;s start with a scenario where you have a txt file that contains the data. Each line of the text file represents one row of data to be displayed in the ListView. The content for each column item (or cell) is delimited by the use of a TAB character. &lt;/p&gt;
&lt;p&gt;A simple text file along these lines might contain the following entries: &lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:Courier New;"&gt;Ged Mead UK &lt;br /&gt;Serge Baranovsky&amp;nbsp;&amp;nbsp; &amp;nbsp;USA &lt;br /&gt;Larry Blake USA &lt;br /&gt;Scott Waletzko&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; USA &lt;br /&gt;Mark Dryden UK &lt;br /&gt;Dave Jeavons UK &lt;br /&gt;Chris Manning USA &lt;br /&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;(The uneven layout is caused by the use of the TAB as the delimiter)&lt;/p&gt;
&lt;p&gt;&lt;span style="text-decoration:underline;"&gt;Reading data from a file&lt;/span&gt;&lt;br /&gt;An easy way of transferring this data from the file to the ListView is to: &lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Use a StreamReader which accesses the text file and then reads it line by line. &lt;br /&gt;&lt;/li&gt;
&lt;li&gt;As each new line is read, it is split by means of the TAB character and temporarily stored in a String array. &lt;br /&gt;&lt;/li&gt;
&lt;li&gt;Next, the first element is pulled out of the String array and used as the item for the first column of the ListView (the ListViewItem).&lt;br /&gt;&lt;/li&gt;
&lt;li&gt;Then the remaining two elements are pulled out of the String array in turn and assigned as the SubItems of the ListViewItem. &lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;Here&amp;#39;s the code that carries out those steps: &lt;/p&gt;
&lt;div style="font-family:Courier New;font-size:10pt;color:black;background:white;"&gt;
&lt;p style="margin:0px;"&gt;&amp;nbsp; &lt;span style="color:#008000;"&gt;&amp;#39; Variable for file to hold data&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin:0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color:#0000ff;"&gt;Dim&lt;/span&gt; TextFile &lt;span style="color:#0000ff;"&gt;As&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;String&lt;/span&gt; = &lt;span style="color:#a31515;"&gt;&amp;quot;F:\MVPs.txt&amp;quot;&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin:0px;"&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style="margin:0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color:#0000ff;"&gt;Private&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;Sub&lt;/span&gt; btnGet_Click(&lt;span style="color:#0000ff;"&gt;ByVal&lt;/span&gt; sender &lt;span style="color:#0000ff;"&gt;As&lt;/span&gt; System.Object, &lt;span style="color:#0000ff;"&gt;ByVal&lt;/span&gt; e &lt;span style="color:#0000ff;"&gt;As&lt;/span&gt; System.EventArgs) &lt;span style="color:#0000ff;"&gt;Handles&lt;/span&gt; btnGet.Click&lt;/p&gt;
&lt;p style="margin:0px;"&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style="margin:0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color:#0000ff;"&gt;Try&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin:0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color:#008000;"&gt;&amp;#39; Declare StreamReader and pass the Path of the text file to be read as a Parameter &lt;/span&gt;&lt;/p&gt;
&lt;p style="margin:0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color:#0000ff;"&gt;Dim&lt;/span&gt; SR &lt;span style="color:#0000ff;"&gt;As&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;New&lt;/span&gt; StreamReader(TextFile)&lt;/p&gt;
&lt;p style="margin:0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color:#008000;"&gt;&amp;#39;&amp;nbsp; Variable to hold data as it is read line by line&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin:0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color:#0000ff;"&gt;Dim&lt;/span&gt; strTemp() &lt;span style="color:#0000ff;"&gt;As&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;String&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin:0px;"&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style="margin:0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color:#0000ff;"&gt;Do&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;While&lt;/span&gt; SR.Peek &amp;lt;&amp;gt; -1 &lt;span style="color:#008000;"&gt;&amp;#39; Use Peek to read the file until there are no more lines &lt;/span&gt;&lt;/p&gt;
&lt;p style="margin:0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color:#008000;"&gt;&amp;#39;&amp;nbsp; Create a variable for the ListViewItems&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin:0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color:#0000ff;"&gt;Dim&lt;/span&gt; LVItem &lt;span style="color:#0000ff;"&gt;As&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;New&lt;/span&gt; ListViewItem&lt;/p&gt;
&lt;p style="margin:0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color:#008000;"&gt;&amp;#39;&amp;nbsp; Read the next line in file and Split it using the TAB. &lt;/span&gt;&lt;/p&gt;
&lt;p style="margin:0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; strTemp = SR.ReadLine.Split(Chr(9))&lt;/p&gt;
&lt;p style="margin:0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color:#008000;"&gt;&amp;#39;&amp;nbsp; Pull out the first element in the line and assign it as&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin:0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color:#008000;"&gt;&amp;#39;&amp;nbsp; the data for the first column.&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin:0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; LVItem.Text = strTemp(0).ToString&lt;/p&gt;
&lt;p style="margin:0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color:#008000;"&gt;&amp;#39;&amp;nbsp; Add the item to the ListView&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin:0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; LVMVPs.Items.Add(LVItem)&lt;/p&gt;
&lt;p style="margin:0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color:#008000;"&gt;&amp;#39;&amp;nbsp; Assign elements 2 &amp;amp; 3 as the subitems.&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin:0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; LVItem.SubItems.Add(strTemp(1).ToString)&lt;/p&gt;
&lt;p style="margin:0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; LVItem.SubItems.Add(strTemp(2).ToString)&lt;/p&gt;
&lt;p style="margin:0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color:#0000ff;"&gt;Loop&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin:0px;"&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style="margin:0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; SR.Close() &lt;span style="color:#008000;"&gt;&amp;#39; Close the StreamReader &lt;/span&gt;&lt;/p&gt;
&lt;p style="margin:0px;"&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style="margin:0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color:#0000ff;"&gt;Catch&lt;/span&gt; ex &lt;span style="color:#0000ff;"&gt;As&lt;/span&gt; Exception&lt;/p&gt;
&lt;p style="margin:0px;"&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style="margin:0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; MsgBox(&lt;span style="color:#a31515;"&gt;&amp;quot;Error reading file.&amp;quot;&lt;/span&gt; &amp;amp; ex.Message)&lt;/p&gt;
&lt;p style="margin:0px;"&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style="margin:0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color:#0000ff;"&gt;End&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;Try&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin:0px;"&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style="margin:0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color:#0000ff;"&gt;End&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;Sub&lt;/span&gt;&lt;/p&gt;
&lt;/div&gt;
&lt;p&gt;You&amp;#39;ll see that I&amp;#39;ve used a variable to hold the path to the file that contains the data. You will also need to include an Imports statement for System.IO at the top of the Class file.&lt;/p&gt;
&lt;p&gt;Although the above code will successfully access the file, read and split the data and then populate the ListView, the result you will see may not be what you expect or want: &lt;/p&gt;
&lt;p&gt;&amp;nbsp;&amp;nbsp;&lt;img src="http://www.xtabvbcity.plus.com/Blogs/Blog_LV_File01.png" alt="" /&gt;&lt;/p&gt;
&lt;p&gt;The first problem is that the View Property of the ListView needs to be set to Details. By default it is set to LargeIcon, with the result you see in the screenshot. You can make this change via the Properties Window or in code.&amp;nbsp;&lt;/p&gt;
&lt;div style="font-family:Courier New;font-size:10pt;color:black;background:white;"&gt;
&lt;p style="margin:0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; LVMVPs.View = View.Details&amp;nbsp;&lt;/p&gt;
&lt;/div&gt;
&lt;p&gt;Make that change, run the project, hit the &amp;#39;Get From File&amp;#39; button and you will see:&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&amp;nbsp;&lt;img src="http://www.xtabvbcity.plus.com/Blogs/Blog_LV_File02.png" alt="" /&gt;&lt;/p&gt;
&lt;p&gt;Again, definitely &lt;i&gt;not&lt;/i&gt; what you want! The problem here is that the ListView won&amp;#39;t automatically create columns for you, even though you might expect that it would based on the data you are feeding in. As it is traditional to have some header text at the top of each column, you can create this at the same time as you create the column itself .&amp;nbsp;&amp;nbsp;&lt;/p&gt;
&lt;div style="font-family:Courier New;font-size:10pt;color:black;background:white;"&gt;
&lt;p style="margin:0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; LVMVPs.Columns.Add(&lt;span style="color:#a31515;"&gt;&amp;quot;First Name&amp;quot;&lt;/span&gt;, 76)&lt;/p&gt;
&lt;p style="margin:0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; LVMVPs.Columns.Add(&lt;span style="color:#a31515;"&gt;&amp;quot;Surname&amp;quot;&lt;/span&gt;, 96)&lt;/p&gt;
&lt;p style="margin:0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; LVMVPs.Columns.Add(&lt;span style="color:#a31515;"&gt;&amp;quot;Location&amp;quot;&lt;/span&gt;, 56)&amp;nbsp;&lt;/p&gt;
&lt;/div&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;Now, when you run the project again you will see the data neatly tabulated in the ListView.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&amp;nbsp;&lt;img src="http://www.xtabvbcity.plus.com/Blogs/Blog_LV_File03.png" alt="" /&gt;&lt;/p&gt;
&lt;p&gt;I have also set the width property of each column in the code above, because the default width would result in some of the longer strings being truncated otherwise.&lt;/p&gt;
&lt;p&gt;If you don&amp;#39;t want to hard code those column headers, you can change the text file structure and have the column headers written to the first line of the file. You would then pull these out first and assign them to the columns, before using the Do While loop to read and display the rest of the file. &lt;/p&gt;
&lt;p&gt;&lt;span style="text-decoration:underline;"&gt;Writing data to a file&lt;/span&gt;&lt;br /&gt;Although a ListView&amp;#39;s key purpose is to display existing data, there may be times when you have edited the content and want to save it back to a text file. The steps involved in doing this are as follows: &lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Use a FileStream to set up the file you are going to write to. &lt;/li&gt;
&lt;li&gt;Use a StreamWriter to access the chosen file. &lt;/li&gt;
&lt;li&gt;Loop through each row of the ListView, pull the text data from each column in turn and write it to the text file, adding a TAB character after each item. &lt;/li&gt;
&lt;li&gt;Add a new line at the end of each loop.&amp;nbsp;&amp;nbsp;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;The code for this process is:&lt;/p&gt;
&lt;div style="font-family:Courier New;font-size:10pt;color:black;background:white;"&gt;
&lt;p style="margin:0px;"&gt;&amp;nbsp;&amp;nbsp; &lt;span style="color:#0000ff;"&gt;Private&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;Sub&lt;/span&gt; btnSave_Click(&lt;span style="color:#0000ff;"&gt;ByVal&lt;/span&gt; sender &lt;span style="color:#0000ff;"&gt;As&lt;/span&gt; System.Object, &lt;span style="color:#0000ff;"&gt;ByVal&lt;/span&gt; e &lt;span style="color:#0000ff;"&gt;As&lt;/span&gt; System.EventArgs) &lt;span style="color:#0000ff;"&gt;Handles&lt;/span&gt; btnSave.Click&lt;/p&gt;
&lt;p style="margin:0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color:#008000;"&gt;&amp;#39;&amp;nbsp; Create FileStream and StreamWriter to access and write to file&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin:0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color:#0000ff;"&gt;Dim&lt;/span&gt; FS &lt;span style="color:#0000ff;"&gt;As&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;New&lt;/span&gt; FileStream(TextFile, FileMode.OpenOrCreate, FileAccess.ReadWrite, FileShare.ReadWrite)&lt;/p&gt;
&lt;p style="margin:0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color:#0000ff;"&gt;Dim&lt;/span&gt; SW &lt;span style="color:#0000ff;"&gt;As&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;New&lt;/span&gt; StreamWriter(FS)&lt;/p&gt;
&lt;p style="margin:0px;"&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style="margin:0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color:#0000ff;"&gt;Try&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin:0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color:#008000;"&gt;&amp;#39;&amp;nbsp; Loop through all rows&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin:0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color:#0000ff;"&gt;For&lt;/span&gt; Index &lt;span style="color:#0000ff;"&gt;As&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;Integer&lt;/span&gt; = 0 &lt;span style="color:#0000ff;"&gt;To&lt;/span&gt; LVMVPs.Items.Count - 1&lt;/p&gt;
&lt;p style="margin:0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color:#008000;"&gt;&amp;#39;&amp;nbsp; Internally loop through all columns, gathering items&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin:0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color:#0000ff;"&gt;For&lt;/span&gt; SubIndex &lt;span style="color:#0000ff;"&gt;As&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;Integer&lt;/span&gt; = 0 &lt;span style="color:#0000ff;"&gt;To&lt;/span&gt; LVMVPs.Items(Index).SubItems.Count - 1&lt;/p&gt;
&lt;p style="margin:0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; SW.Write(LVMVPs.Items(Index).SubItems(SubIndex).Text &amp;amp; Chr(9))&lt;/p&gt;
&lt;p style="margin:0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color:#0000ff;"&gt;Next&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin:0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color:#008000;"&gt;&amp;#39;&amp;nbsp; Create new line ready for next row&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin:0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; SW.Write(Environment.NewLine)&lt;/p&gt;
&lt;p style="margin:0px;"&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style="margin:0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color:#0000ff;"&gt;Next&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin:0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color:#0000ff;"&gt;Catch&lt;/span&gt; ex &lt;span style="color:#0000ff;"&gt;As&lt;/span&gt; Exception&lt;/p&gt;
&lt;p style="margin:0px;"&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style="margin:0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; MsgBox(&lt;span style="color:#a31515;"&gt;&amp;quot;Error saving to file.&amp;quot;&lt;/span&gt; &amp;amp; ex.Message)&lt;/p&gt;
&lt;p style="margin:0px;"&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style="margin:0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color:#0000ff;"&gt;Finally&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin:0px;"&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style="margin:0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; SW.Close()&lt;/p&gt;
&lt;p style="margin:0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; FS.Close()&lt;/p&gt;
&lt;p style="margin:0px;"&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style="margin:0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color:#0000ff;"&gt;End&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;Try&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin:0px;"&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style="margin:0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color:#0000ff;"&gt;End&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;Sub&lt;/span&gt;&lt;/p&gt;
&lt;/div&gt;
&lt;p&gt;For many simple scenarios where you want to display tabulated text in a ListView (and optionally save it back to a file), the above approaches will work just fine. There will of course be times when you need something more sophisticated and I will look at some of those in later blogs.&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://cs.vbcity.com/aggbug.aspx?PostID=252" width="1" height="1"&gt;</description><category domain="http://cs.vbcity.com/blogs/xtab/archive/tags/Windows+Forms/default.aspx">Windows Forms</category><category domain="http://cs.vbcity.com/blogs/xtab/archive/tags/ListView/default.aspx">ListView</category><category domain="http://cs.vbcity.com/blogs/xtab/archive/tags/File/default.aspx">File</category><category domain="http://cs.vbcity.com/blogs/xtab/archive/tags/Visual+Basic/default.aspx">Visual Basic</category><category domain="http://cs.vbcity.com/blogs/xtab/archive/tags/Read/default.aspx">Read</category><category domain="http://cs.vbcity.com/blogs/xtab/archive/tags/Write/default.aspx">Write</category></item><item><title>Silverlight 3 - Enabling the Silverlight 'Out of Browser' Experience</title><link>http://cs.vbcity.com/blogs/mike-mcintyre/archive/2009/10/23/silverlight-3-enabling-the-silverlight-out-of-browser-experience.aspx</link><pubDate>Fri, 23 Oct 2009 13:09:00 GMT</pubDate><guid isPermaLink="false">921a0936-6df9-4a08-8006-68f3b1747f32:253</guid><dc:creator>Mike McIntyre</dc:creator><slash:comments>0</slash:comments><description>&lt;p&gt;&amp;nbsp;Silverlight 3 applications can be installed as local applications on PCs and MACs.&lt;/p&gt;
&lt;p&gt;This is a brief &amp;#39;how to&amp;#39; for enabling, installing, and&amp;nbsp;removing&amp;nbsp;a Silverlight 3 out of browser&amp;nbsp;applications.&lt;/p&gt;
&lt;p&gt;1. Use Visual Studio 2008 or 2010 to create a Silverlight&amp;nbsp;3&amp;nbsp;project.&lt;/p&gt;
&lt;p&gt;2. Open the Silverlight 3 project&amp;#39;s properties dialog. Select the &amp;#39;Silverlight&amp;#39; tab. Check the &amp;#39;Enable running application out of the browser&amp;#39;. Click the &amp;#39;Out-of-Browser Settings...&amp;#39; button.&lt;/p&gt;
&lt;p&gt;&lt;img src="http://cs.vbcity.com/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/mike-mcintyre.Silverlight3/Silverlight3PropertiesDialog.jpg" alt="" /&gt;&lt;/p&gt;
&lt;p&gt;3. The &amp;#39;Out-of-Browser Settings&amp;#39; dialog opens. Use it to configure your Silverlight 3 application for out of browser installation.&lt;/p&gt;
&lt;p&gt;&lt;img src="http://cs.vbcity.com/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/mike-mcintyre.Silverlight3/Silverlight3OutOfBrowserSettingsDialog.jpg" alt="" /&gt;&lt;/p&gt;
&lt;p&gt;4. Run your application.&amp;nbsp; Right-click a page in your application and select &amp;#39;Install..&amp;#39; menu item.&lt;/p&gt;
&lt;p&gt;&lt;img src="http://cs.vbcity.com/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/mike-mcintyre.Silverlight3/Silverlight3InstallLocal.jpg" alt="" /&gt;&lt;/p&gt;
&lt;p&gt;5. The &amp;#39;Install application&amp;#39; dialog opens. Use it to install short cuts to your application.&lt;/p&gt;
&lt;p&gt;&lt;img src="http://cs.vbcity.com/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/mike-mcintyre.Silverlight3/Silverlight3InstallApplicationDialog.jpg" alt="" /&gt;&lt;/p&gt;
&lt;p&gt;6. The Silverlight 3 out of browser application short cut on the desktop:&lt;/p&gt;
&lt;p&gt;&lt;img src="http://cs.vbcity.com/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/mike-mcintyre.Silverlight3/Silverlight3AppIconOnDesktop.jpg" alt="" /&gt;&lt;/p&gt;
&lt;p&gt;7. Use the short cut to launch the application on the computer. Here&amp;#39;s a screen shot of my sample application running locally on my computer:&lt;/p&gt;
&lt;p&gt;&lt;img src="http://cs.vbcity.com/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/mike-mcintyre.Silverlight3/Silverlight3LocalApplicationRunning.jpg" alt="" /&gt;&lt;/p&gt;
&lt;p&gt;8 To remove the Silverlight 3 out of browser application from your&amp;nbsp;computer: run it, right-click a page in the application, and select the &amp;#39;Remove this application...&amp;#39; menu item.&lt;/p&gt;
&lt;p&gt;&lt;img src="http://cs.vbcity.com/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/mike-mcintyre.Silverlight3/Silverlight3RemoveLocalApp.jpg" alt="" /&gt;&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://cs.vbcity.com/aggbug.aspx?PostID=253" width="1" height="1"&gt;</description></item><item><title>Three ways of writing an XML file</title><link>http://cs.vbcity.com/blogs/larryblake/archive/2009/10/21/three-ways-of-writing-an-xml-file.aspx</link><pubDate>Wed, 21 Oct 2009 04:51:00 GMT</pubDate><guid isPermaLink="false">921a0936-6df9-4a08-8006-68f3b1747f32:251</guid><dc:creator>LarryBlake</dc:creator><slash:comments>0</slash:comments><description>&lt;p&gt;I just got back from the &amp;quot;Code Camp&amp;quot; of the Boston .Net User Group.&amp;nbsp; It was a really good event, and I saw &lt;a href="http://www.josephmanderson.com/" title="Joseph Anderson" class="null"&gt;Joseph Anderson&lt;/a&gt;&amp;#39;s presentation about using LINQ and XML.&amp;nbsp; Basically, he talked about &lt;strong&gt;XElement&lt;/strong&gt; and &lt;strong&gt;XDocument&lt;/strong&gt;, which are new in .Net 3.5.&amp;nbsp; They&amp;#39;re part of the LINQ namespace, and you can do some really interesting things with them.&lt;/p&gt;
&lt;p&gt;But I just want to talk about how they simplify writing an XML file.&amp;nbsp; I recently had occasion to do this, and I did something like this:&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;span style="color:#0000ff;font-size:x-small;"&gt;&lt;span style="color:#0000ff;font-size:x-small;"&gt;&lt;span style="background-color:#c0c0c0;font-family:courier new,courier;"&gt;Private Sub &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span style="font-size:x-small;"&gt;&lt;span style="background-color:#c0c0c0;font-family:courier new,courier;"&gt;Xml1()&lt;/span&gt;&lt;span style="font-size:x-small;"&gt; &lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-family:courier new,courier;"&gt;&lt;span style="background-color:#c0c0c0;"&gt;&lt;span style="color:#008000;font-size:x-small;"&gt;&lt;span style="color:#008000;font-size:x-small;"&gt;&amp;nbsp; &amp;#39; Start document&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="color:#0000ff;font-size:x-small;"&gt;&lt;span style="color:#0000ff;font-size:x-small;"&gt;&amp;nbsp; Dim&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:x-small;"&gt; fs &lt;/span&gt;&lt;span style="color:#0000ff;font-size:x-small;"&gt;&lt;span style="color:#0000ff;font-size:x-small;"&gt;As&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:x-small;"&gt; &lt;/span&gt;&lt;span style="color:#0000ff;font-size:x-small;"&gt;&lt;span style="color:#0000ff;font-size:x-small;"&gt;New&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:x-small;"&gt; FileStream(&lt;/span&gt;&lt;span style="color:#a31515;font-size:x-small;"&gt;&lt;span style="color:#a31515;font-size:x-small;"&gt;&amp;quot;MyXML.xml&amp;quot;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family:courier new,courier;"&gt;&lt;span style="background-color:#c0c0c0;"&gt;&lt;span style="font-size:x-small;"&gt;, FileMode.Create)&lt;br /&gt;&amp;nbsp; &lt;/span&gt;&lt;span style="color:#0000ff;font-size:x-small;"&gt;&lt;span style="color:#0000ff;font-size:x-small;"&gt;Dim&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:x-small;"&gt; w &lt;/span&gt;&lt;span style="color:#0000ff;font-size:x-small;"&gt;&lt;span style="color:#0000ff;font-size:x-small;"&gt;As&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:x-small;"&gt; &lt;/span&gt;&lt;span style="color:#0000ff;font-size:x-small;"&gt;&lt;span style="color:#0000ff;font-size:x-small;"&gt;New&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:x-small;"&gt; XmlTextWriter(fs, Encoding.GetEncoding(&lt;/span&gt;&lt;span style="color:#a31515;font-size:x-small;"&gt;&lt;span style="color:#a31515;font-size:x-small;"&gt;&amp;quot;UTF-8&amp;quot;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:x-small;"&gt;&lt;span style="background-color:#c0c0c0;font-family:courier new,courier;"&gt;))&lt;/span&gt;&lt;span style="font-size:x-small;"&gt; &lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="color:#008000;font-size:x-small;"&gt;&lt;span style="background-color:#c0c0c0;font-family:courier new,courier;color:#008000;font-size:x-small;"&gt;&amp;nbsp;&amp;#39; Write header&lt;br /&gt;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;span style="font-family:courier new,courier;"&gt;&lt;span style="background-color:#c0c0c0;"&gt;&lt;span style="font-size:x-small;"&gt;w.WriteStartDocument()&lt;br /&gt;&amp;nbsp; w.WriteStartElement(&lt;/span&gt;&lt;span style="color:#a31515;font-size:x-small;"&gt;&lt;span style="color:#a31515;font-size:x-small;"&gt;&amp;quot;People&amp;quot;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:x-small;"&gt;&lt;span style="background-color:#c0c0c0;font-family:courier new,courier;"&gt;)&lt;/span&gt;&lt;span style="font-size:x-small;"&gt; &lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-family:courier new,courier;"&gt;&lt;span style="background-color:#c0c0c0;"&gt;&lt;span style="color:#008000;font-size:x-small;"&gt;&lt;span style="color:#008000;font-size:x-small;"&gt;&amp;nbsp; &amp;#39; Write a person&lt;br /&gt;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:x-small;"&gt;w.WriteStartElement(&lt;/span&gt;&lt;span style="color:#a31515;font-size:x-small;"&gt;&lt;span style="color:#a31515;font-size:x-small;"&gt;&amp;quot;Person&amp;quot;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family:courier new,courier;"&gt;&lt;span style="background-color:#c0c0c0;"&gt;&lt;span style="font-size:x-small;"&gt;)&lt;br /&gt;&amp;nbsp; &lt;/span&gt;&lt;span style="font-size:x-small;"&gt;w.WriteAttributeString(&lt;/span&gt;&lt;span style="color:#a31515;font-size:x-small;"&gt;&lt;span style="color:#a31515;font-size:x-small;"&gt;&amp;quot;id&amp;quot;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:x-small;"&gt;, &lt;/span&gt;&lt;span style="color:#a31515;font-size:x-small;"&gt;&lt;span style="color:#a31515;font-size:x-small;"&gt;&amp;quot;5&amp;quot;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family:courier new,courier;"&gt;&lt;span style="background-color:#c0c0c0;"&gt;&lt;span style="font-size:x-small;"&gt;)&lt;br /&gt;&amp;nbsp; w.WriteValue(&lt;/span&gt;&lt;span style="color:#a31515;font-size:x-small;"&gt;&lt;span style="color:#a31515;font-size:x-small;"&gt;&amp;quot;John Smith&amp;quot;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:x-small;"&gt;&lt;span style="background-color:#c0c0c0;font-family:courier new,courier;"&gt;)&lt;br /&gt;&amp;nbsp; w.WriteEndElement()&lt;/span&gt;&lt;span style="font-size:x-small;"&gt; &lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="color:#008000;font-size:x-small;"&gt;&lt;span style="background-color:#c0c0c0;font-family:courier new,courier;color:#008000;font-size:x-small;"&gt;&amp;nbsp; &amp;#39; Close top element&lt;br /&gt;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:x-small;"&gt;&lt;span style="background-color:#c0c0c0;font-family:courier new,courier;"&gt;w.WriteEndElement()&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-size:x-small;"&gt;&lt;span style="background-color:#c0c0c0;font-family:courier new,courier;"&gt;&lt;/span&gt;&lt;span style="font-size:x-small;"&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family:courier new,courier;"&gt;&amp;nbsp; w.Close()&lt;br /&gt;&lt;span style="font-family:courier new,courier;"&gt;&lt;span style="background-color:#c0c0c0;"&gt;&lt;span style="color:#0000ff;font-size:x-small;"&gt;&lt;span style="color:#0000ff;font-size:x-small;"&gt;End&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:x-small;"&gt; &lt;/span&gt;&lt;span style="color:#0000ff;font-size:x-small;"&gt;&lt;span style="color:#0000ff;font-size:x-small;"&gt;Sub&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family:courier new,courier;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-size:x-small;"&gt;&lt;span style="color:#000000;font-size:x-small;"&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-size:x-small;"&gt;&lt;span style="color:#000000;font-size:x-small;"&gt;I really don&amp;#39;t like this code.&amp;nbsp; I kept it short for this example, but it&amp;#39;s easy to forget your end elements.&amp;nbsp; Anything more complex gets very verbose.&amp;nbsp; Also, when you type this code in, the IDE corrects your indentation, which might otherwise make it a little easier to read.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;You could also use a method like this, which I think is slightly better:&lt;/p&gt;
&lt;p&gt;&lt;span style="font-family:courier new,courier;"&gt;&lt;span style="background-color:#c0c0c0;"&gt;&lt;span style="color:#0000ff;font-size:x-small;"&gt;&lt;span style="color:#0000ff;font-size:x-small;"&gt;Private&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:x-small;"&gt; &lt;/span&gt;&lt;span style="color:#0000ff;font-size:x-small;"&gt;&lt;span style="color:#0000ff;font-size:x-small;"&gt;Sub&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:x-small;"&gt;&lt;span style="background-color:#c0c0c0;font-family:courier new,courier;"&gt; Xml2()&lt;/span&gt; &lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-family:courier new,courier;"&gt;&lt;span style="background-color:#c0c0c0;"&gt;&lt;span style="color:#008000;font-size:x-small;"&gt;&lt;span style="color:#008000;font-size:x-small;"&gt;&amp;nbsp; &amp;#39; Start document&lt;br /&gt;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;span style="color:#0000ff;font-size:x-small;"&gt;&lt;span style="color:#0000ff;font-size:x-small;"&gt;Dim&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:x-small;"&gt; xd &lt;/span&gt;&lt;span style="color:#0000ff;font-size:x-small;"&gt;&lt;span style="color:#0000ff;font-size:x-small;"&gt;As&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:x-small;"&gt; &lt;/span&gt;&lt;span style="color:#0000ff;font-size:x-small;"&gt;&lt;span style="color:#0000ff;font-size:x-small;"&gt;New&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:x-small;"&gt;&lt;span style="background-color:#c0c0c0;font-family:courier new,courier;"&gt;XmlDocument()&lt;/span&gt;&lt;span style="font-size:x-small;"&gt; &lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-family:courier new,courier;"&gt;&lt;span style="background-color:#c0c0c0;"&gt;&lt;span style="color:#008000;font-size:x-small;"&gt;&lt;span style="color:#008000;font-size:x-small;"&gt;&amp;nbsp; &amp;#39; Write header&lt;br /&gt;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:x-small;"&gt;xd.AppendChild(xd.CreateXmlDeclaration(&lt;/span&gt;&lt;span style="color:#a31515;font-size:x-small;"&gt;&lt;span style="color:#a31515;font-size:x-small;"&gt;&amp;quot;1.0&amp;quot;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:x-small;"&gt;, &lt;/span&gt;&lt;span style="color:#a31515;font-size:x-small;"&gt;&lt;span style="color:#a31515;font-size:x-small;"&gt;&amp;quot;UTF-8&amp;quot;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:x-small;"&gt;, &lt;/span&gt;&lt;span style="color:#a31515;font-size:x-small;"&gt;&lt;span style="color:#a31515;font-size:x-small;"&gt;&amp;quot;no&amp;quot;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:x-small;"&gt;&lt;span style="background-color:#c0c0c0;font-family:courier new,courier;"&gt;))&lt;/span&gt;&lt;span style="font-size:x-small;"&gt; &lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-family:courier new,courier;"&gt;&lt;span style="background-color:#c0c0c0;"&gt;&lt;span style="color:#0000ff;font-size:x-small;"&gt;&lt;span style="color:#0000ff;font-size:x-small;"&gt;&amp;nbsp; Dim&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:x-small;"&gt; peop &lt;/span&gt;&lt;span style="color:#0000ff;font-size:x-small;"&gt;&lt;span style="color:#0000ff;font-size:x-small;"&gt;As&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:x-small;"&gt; XmlElement = xd.CreateElement(&lt;/span&gt;&lt;span style="color:#a31515;font-size:x-small;"&gt;&lt;span style="color:#a31515;font-size:x-small;"&gt;&amp;quot;People&amp;quot;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:x-small;"&gt;&lt;span style="background-color:#c0c0c0;font-family:courier new,courier;"&gt;)&lt;/span&gt;&lt;span style="font-size:x-small;"&gt; &lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-family:courier new,courier;"&gt;&lt;span style="background-color:#c0c0c0;"&gt;&lt;span style="color:#008000;font-size:x-small;"&gt;&lt;span style="color:#008000;font-size:x-small;"&gt;&amp;nbsp; &amp;#39; Write a person&lt;br /&gt;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;span style="color:#0000ff;font-size:x-small;"&gt;&lt;span style="color:#0000ff;font-size:x-small;"&gt;Dim&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:x-small;"&gt; pers &lt;/span&gt;&lt;span style="color:#0000ff;font-size:x-small;"&gt;&lt;span style="color:#0000ff;font-size:x-small;"&gt;As&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:x-small;"&gt; XmlElement = xd.CreateElement(&lt;/span&gt;&lt;span style="color:#a31515;font-size:x-small;"&gt;&lt;span style="color:#a31515;font-size:x-small;"&gt;&amp;quot;Person&amp;quot;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family:courier new,courier;"&gt;&lt;span style="background-color:#c0c0c0;"&gt;&lt;span style="font-size:x-small;"&gt;)&lt;br /&gt;&amp;nbsp; &lt;/span&gt;&lt;span style="color:#0000ff;font-size:x-small;"&gt;&lt;span style="color:#0000ff;font-size:x-small;"&gt;Dim&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:x-small;"&gt; id &lt;/span&gt;&lt;span style="color:#0000ff;font-size:x-small;"&gt;&lt;span style="color:#0000ff;font-size:x-small;"&gt;As&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:x-small;"&gt; XmlAttribute = xd.CreateAttribute(&lt;/span&gt;&lt;span style="color:#a31515;font-size:x-small;"&gt;&lt;span style="color:#a31515;font-size:x-small;"&gt;&amp;quot;id&amp;quot;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family:courier new,courier;font-size:x-small;"&gt;)&lt;br /&gt;&amp;nbsp; id.Value = &lt;/span&gt;&lt;span style="color:#a31515;font-size:x-small;"&gt;&lt;span style="background-color:#c0c0c0;font-family:courier new,courier;color:#a31515;font-size:x-small;"&gt;&amp;quot;5&amp;quot;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family:courier new,courier;"&gt;&lt;span style="background-color:#c0c0c0;"&gt;&lt;span style="font-size:x-small;"&gt;pers.Attributes.Append(id)&lt;br /&gt;&amp;nbsp; pers.InnerText = &lt;/span&gt;&lt;span style="color:#a31515;font-size:x-small;"&gt;&lt;span style="color:#a31515;font-size:x-small;"&gt;&amp;quot;John Smith&amp;quot;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;span style="font-size:x-small;"&gt;&lt;span style="background-color:#c0c0c0;font-family:courier new,courier;"&gt;&amp;nbsp; peop.AppendChild(pers)&lt;/span&gt;&lt;/span&gt; &lt;/p&gt;
&lt;p&gt;&lt;span style="color:#008000;font-size:x-small;"&gt;&lt;span style="background-color:#c0c0c0;font-family:courier new,courier;color:#008000;font-size:x-small;"&gt;&amp;nbsp; &amp;#39; Write top element&lt;br /&gt;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:x-small;"&gt;&lt;span style="background-color:#c0c0c0;font-family:courier new,courier;"&gt;xd.AppendChild(peop)&lt;/span&gt;&lt;span style="font-size:x-small;"&gt; &lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-family:courier new,courier;"&gt;&lt;span style="background-color:#c0c0c0;"&gt;&lt;span style="color:#008000;font-size:x-small;"&gt;&lt;span style="color:#008000;font-size:x-small;"&gt;&amp;nbsp; &amp;#39; Write to file&lt;br /&gt;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;span style="color:#0000ff;font-size:x-small;"&gt;&lt;span style="color:#0000ff;font-size:x-small;"&gt;Dim&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:x-small;"&gt; fs &lt;/span&gt;&lt;span style="color:#0000ff;font-size:x-small;"&gt;&lt;span style="color:#0000ff;font-size:x-small;"&gt;As&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:x-small;"&gt; &lt;/span&gt;&lt;span style="color:#0000ff;font-size:x-small;"&gt;&lt;span style="color:#0000ff;font-size:x-small;"&gt;New&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:x-small;"&gt; FileStream(&lt;/span&gt;&lt;span style="color:#a31515;font-size:x-small;"&gt;&lt;span style="color:#a31515;font-size:x-small;"&gt;&amp;quot;MyXML.xml&amp;quot;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family:courier new,courier;"&gt;&lt;span style="background-color:#c0c0c0;"&gt;&lt;span style="font-size:x-small;"&gt;, FileMode.Create)&lt;br /&gt;&amp;nbsp; &lt;/span&gt;&lt;span style="color:#0000ff;font-size:x-small;"&gt;&lt;span style="color:#0000ff;font-size:x-small;"&gt;Dim&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:x-small;"&gt; w &lt;/span&gt;&lt;span style="color:#0000ff;font-size:x-small;"&gt;&lt;span style="color:#0000ff;font-size:x-small;"&gt;As&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:x-small;"&gt; &lt;/span&gt;&lt;span style="color:#0000ff;font-size:x-small;"&gt;&lt;span style="color:#0000ff;font-size:x-small;"&gt;New&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:x-small;"&gt; XmlTextWriter(fs, Encoding.GetEncoding(&lt;/span&gt;&lt;span style="color:#a31515;font-size:x-small;"&gt;&lt;span style="color:#a31515;font-size:x-small;"&gt;&amp;quot;UTF-8&amp;quot;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family:courier new,courier;"&gt;&lt;span style="background-color:#c0c0c0;"&gt;&lt;span style="font-size:x-small;"&gt;))&lt;br /&gt;&amp;nbsp; xd.WriteContentTo(w)&lt;br /&gt;&amp;nbsp; w.Flush()&lt;br /&gt;&lt;/span&gt;&lt;span style="color:#0000ff;font-size:x-small;"&gt;&lt;span style="color:#0000ff;font-size:x-small;"&gt;End&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:x-small;"&gt; &lt;/span&gt;&lt;span style="color:#0000ff;font-size:x-small;"&gt;&lt;span style="color:#0000ff;font-size:x-small;"&gt;Sub&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt; &lt;/p&gt;
&lt;p&gt;But best of all is the LINQ way, with XElement and XDoc.&amp;nbsp; Much more concise and readable.&lt;/p&gt;
&lt;p&gt;&lt;span style="color:#0000ff;font-size:x-small;"&gt;&lt;span style="color:#0000ff;font-size:x-small;"&gt;&lt;span style="font-family:courier new,courier;"&gt;&lt;span style="background-color:#c0c0c0;"&gt;&lt;span style="color:#0000ff;font-size:x-small;"&gt;&lt;span style="color:#0000ff;font-size:x-small;"&gt;Sub&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:x-small;"&gt;&lt;span style="background-color:#c0c0c0;font-family:courier new,courier;color:#000000;"&gt; Xml3()&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt; &lt;/p&gt;
&lt;p&gt;&lt;span style="font-family:courier new,courier;"&gt;&lt;span style="background-color:#c0c0c0;"&gt;&lt;span style="color:#008000;font-size:x-small;"&gt;&lt;span style="color:#008000;font-size:x-small;"&gt;&amp;nbsp; &amp;#39; Start document and write header&lt;br /&gt;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;span style="color:#0000ff;font-size:x-small;"&gt;&lt;span style="color:#0000ff;font-size:x-small;"&gt;Dim&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:x-small;"&gt; xd &lt;/span&gt;&lt;span style="color:#0000ff;font-size:x-small;"&gt;&lt;span style="color:#0000ff;font-size:x-small;"&gt;As&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:x-small;"&gt; &lt;/span&gt;&lt;span style="color:#0000ff;font-size:x-small;"&gt;&lt;span style="color:#0000ff;font-size:x-small;"&gt;New&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:x-small;"&gt; XDocument(&lt;/span&gt;&lt;span style="color:#0000ff;font-size:x-small;"&gt;&lt;span style="color:#0000ff;font-size:x-small;"&gt;New&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:x-small;"&gt; XDeclaration(&lt;/span&gt;&lt;span style="color:#a31515;font-size:x-small;"&gt;&lt;span style="color:#a31515;font-size:x-small;"&gt;&amp;quot;1.0&amp;quot;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:x-small;"&gt;, &lt;/span&gt;&lt;span style="color:#a31515;font-size:x-small;"&gt;&lt;span style="color:#a31515;font-size:x-small;"&gt;&amp;quot;UTF-8&amp;quot;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:x-small;"&gt;, &lt;/span&gt;&lt;span style="color:#a31515;font-size:x-small;"&gt;&lt;span style="color:#a31515;font-size:x-small;"&gt;&amp;quot;yes&amp;quot;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:x-small;"&gt;&lt;span style="background-color:#c0c0c0;font-family:courier new,courier;"&gt;))&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family:courier new,courier;"&gt;&lt;span style="background-color:#c0c0c0;"&gt;&lt;span style="color:#0000ff;font-size:x-small;"&gt;&lt;span style="color:#0000ff;font-size:x-small;"&gt;&amp;nbsp; Dim&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:x-small;"&gt; peop &lt;/span&gt;&lt;span style="color:#0000ff;font-size:x-small;"&gt;&lt;span style="color:#0000ff;font-size:x-small;"&gt;As&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:x-small;"&gt; &lt;/span&gt;&lt;span style="color:#0000ff;font-size:x-small;"&gt;&lt;span style="color:#0000ff;font-size:x-small;"&gt;New&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:x-small;"&gt; XElement(&lt;/span&gt;&lt;span style="color:#a31515;font-size:x-small;"&gt;&lt;span style="color:#a31515;font-size:x-small;"&gt;&amp;quot;People&amp;quot;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:x-small;"&gt;&lt;span style="background-color:#c0c0c0;font-family:courier new,courier;"&gt;)&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family:courier new,courier;"&gt;&lt;span style="background-color:#c0c0c0;"&gt;&lt;span style="color:#008000;font-size:x-small;"&gt;&lt;span style="color:#008000;font-size:x-small;"&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-family:courier new,courier;"&gt;&lt;span style="background-color:#c0c0c0;"&gt;&lt;span style="color:#008000;font-size:x-small;"&gt;&lt;span style="color:#008000;font-size:x-small;"&gt;&amp;nbsp;&amp;nbsp;&amp;#39; Write a person&lt;br /&gt;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;span style="color:#0000ff;font-size:x-small;"&gt;&lt;span style="color:#0000ff;font-size:x-small;"&gt;Dim&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:x-small;"&gt; pers &lt;/span&gt;&lt;span style="color:#0000ff;font-size:x-small;"&gt;&lt;span style="color:#0000ff;font-size:x-small;"&gt;As&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:x-small;"&gt; &lt;/span&gt;&lt;span style="color:#0000ff;font-size:x-small;"&gt;&lt;span style="color:#0000ff;font-size:x-small;"&gt;New&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:x-small;"&gt; XElement(&lt;/span&gt;&lt;span style="color:#a31515;font-size:x-small;"&gt;&lt;span style="color:#a31515;font-size:x-small;"&gt;&amp;quot;Person&amp;quot;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:x-small;"&gt;, &lt;/span&gt;&lt;span style="color:#a31515;font-size:x-small;"&gt;&lt;span style="color:#a31515;font-size:x-small;"&gt;&amp;quot;John Smith&amp;quot;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:x-small;"&gt;, &lt;/span&gt;&lt;span style="color:#0000ff;font-size:x-small;"&gt;&lt;span style="color:#0000ff;font-size:x-small;"&gt;New&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:x-small;"&gt; XAttribute(&lt;/span&gt;&lt;span style="color:#a31515;font-size:x-small;"&gt;&lt;span style="color:#a31515;font-size:x-small;"&gt;&amp;quot;id&amp;quot;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:x-small;"&gt;, &lt;/span&gt;&lt;span style="color:#a31515;font-size:x-small;"&gt;&lt;span style="color:#a31515;font-size:x-small;"&gt;&amp;quot;5&amp;quot;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:x-small;"&gt;&lt;span style="background-color:#c0c0c0;font-family:courier new,courier;"&gt;))&lt;br /&gt;&amp;nbsp; peop.Add(pers)&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="color:#008000;font-size:x-small;"&gt;&lt;span style="background-color:#c0c0c0;font-family:courier new,courier;color:#008000;font-size:x-small;"&gt;&amp;nbsp; &amp;#39; Write top element&lt;br /&gt;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:x-small;"&gt;&lt;span style="background-color:#c0c0c0;font-family:courier new,courier;"&gt;xd.Add(peop)&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-family:courier new,courier;"&gt;&lt;span style="background-color:#c0c0c0;"&gt;&lt;span style="color:#008000;font-size:x-small;"&gt;&lt;span style="color:#008000;font-size:x-small;"&gt;&amp;nbsp;&amp;#39;&amp;nbsp;Write to file&lt;br /&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span style="color:#0000ff;font-size:x-small;"&gt;&lt;span style="color:#0000ff;font-size:x-small;"&gt;Dim&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:x-small;"&gt; fs &lt;/span&gt;&lt;span style="color:#0000ff;font-size:x-small;"&gt;&lt;span style="color:#0000ff;font-size:x-small;"&gt;As&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:x-small;"&gt; &lt;/span&gt;&lt;span style="color:#0000ff;font-size:x-small;"&gt;&lt;span style="color:#0000ff;font-size:x-small;"&gt;New&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:x-small;"&gt; FileStream(&lt;/span&gt;&lt;span style="color:#a31515;font-size:x-small;"&gt;&lt;span style="color:#a31515;font-size:x-small;"&gt;&amp;quot;MyXML.xml&amp;quot;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family:courier new,courier;"&gt;&lt;span style="background-color:#c0c0c0;"&gt;&lt;span style="font-size:x-small;"&gt;, FileMode.Create)&lt;br /&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color:#0000ff;font-size:x-small;"&gt;&lt;span style="color:#0000ff;font-size:x-small;"&gt;Dim&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:x-small;"&gt; w &lt;/span&gt;&lt;span style="color:#0000ff;font-size:x-small;"&gt;&lt;span style="color:#0000ff;font-size:x-small;"&gt;As&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:x-small;"&gt; &lt;/span&gt;&lt;span style="color:#0000ff;font-size:x-small;"&gt;&lt;span style="color:#0000ff;font-size:x-small;"&gt;New&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:x-small;"&gt; XmlTextWriter(fs, Encoding.GetEncoding(&lt;/span&gt;&lt;span style="color:#a31515;font-size:x-small;"&gt;&lt;span style="color:#a31515;font-size:x-small;"&gt;&amp;quot;UTF-8&amp;quot;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family:courier new,courier;"&gt;&lt;span style="background-color:#c0c0c0;"&gt;&lt;span style="font-size:x-small;"&gt;))&lt;br /&gt;&amp;nbsp;xd.WriteTo(w)&lt;br /&gt;&amp;nbsp;w.Flush()&lt;br /&gt;&lt;/span&gt;&lt;span style="color:#0000ff;font-size:x-small;"&gt;&lt;span style="color:#0000ff;font-size:x-small;"&gt;End&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:x-small;"&gt; &lt;/span&gt;&lt;span style="color:#0000ff;font-size:x-small;"&gt;&lt;span style="color:#0000ff;font-size:x-small;"&gt;Sub&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;All of these methods produce the same file. I&amp;#39;ts up to you.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://cs.vbcity.com/aggbug.aspx?PostID=251" width="1" height="1"&gt;</description><category domain="http://cs.vbcity.com/blogs/larryblake/archive/tags/xml+linq+xelement+xdocument/default.aspx">xml linq xelement xdocument</category></item><item><title>Visual Basic 2010 and .NET Framework 4 Deliver Beta 2 in Final Stretch to March 22 Launch</title><link>http://cs.vbcity.com/blogs/mike-mcintyre/archive/2009/10/20/visual-basic-2010-and-net-framework-4-deliver-beta-2-in-final-stretch-to-march-22-launch.aspx</link><pubDate>Tue, 20 Oct 2009 14:44:00 GMT</pubDate><guid isPermaLink="false">921a0936-6df9-4a08-8006-68f3b1747f32:249</guid><dc:creator>Mike McIntyre</dc:creator><slash:comments>0</slash:comments><description>&lt;p&gt;&amp;nbsp;Read all about it at:&amp;nbsp; &lt;a target="_blank" href="http://www.microsoft.com/presspass/press/2009/oct09/10-19vsfinalstretchpr.mspx" class="null"&gt;Final Stretch&lt;/a&gt;&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://cs.vbcity.com/aggbug.aspx?PostID=249" width="1" height="1"&gt;</description></item><item><title>Search for Files with a Specific Extension in and below a System Special Folder</title><link>http://cs.vbcity.com/blogs/mike-mcintyre/archive/2009/10/14/search-for-files-with-a-specific-extension-in-and-below-a-system-special-folder.aspx</link><pubDate>Thu, 15 Oct 2009 02:19:00 GMT</pubDate><guid isPermaLink="false">921a0936-6df9-4a08-8006-68f3b1747f32:248</guid><dc:creator>Mike McIntyre</dc:creator><slash:comments>0</slash:comments><description>The Visual Basic My.Computer.FileSystem GetFiles method can be used to search for files with a specific extension in or below a specific directory:

Below is a function for that purpose:
...(&lt;a href="http://cs.vbcity.com/blogs/mike-mcintyre/archive/2009/10/14/search-for-files-with-a-specific-extension-in-and-below-a-system-special-folder.aspx"&gt;read more&lt;/a&gt;)&lt;img src="http://cs.vbcity.com/aggbug.aspx?PostID=248" width="1" height="1"&gt;</description><category domain="http://cs.vbcity.com/blogs/mike-mcintyre/archive/tags/GetFiles/default.aspx">GetFiles</category></item><item><title>Validation and the Windows Forms ErrorProvider</title><link>http://cs.vbcity.com/blogs/mike-mcintyre/archive/2009/10/10/validation-and-the-windows-forms-errorprovider.aspx</link><pubDate>Sun, 11 Oct 2009 03:03:00 GMT</pubDate><guid isPermaLink="false">921a0936-6df9-4a08-8006-68f3b1747f32:247</guid><dc:creator>Mike McIntyre</dc:creator><slash:comments>0</slash:comments><description>&lt;p&gt;&lt;span style="font-size:small;"&gt;Download source code here -&amp;gt;&amp;nbsp; &lt;/span&gt;&lt;a href="http://www.getdotnetcode.com/nexDotNet/020036/020036.htm"&gt;&lt;span style="font-size:small;"&gt;Validation and the Windows Forms ErrorProvider Component&lt;/span&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;I&amp;#39;ve noticed that not a lot of people take advantage of the Windows Forms&amp;nbsp;built in user interface for indicating that a control on a form has an error associated with it - the ErrorProvider component.&lt;/p&gt;
&lt;p&gt;The&amp;nbsp;ErrorProvider presents a simple mechanism for indicating to the end user that a control on a form has an error associated with it. If an error description string is specified for the control, an icon appears next to the control. The icon flashes in the manner specified by BlinkStyle, at the rate specified by BlinkRate. When the mouse hovers over the icon, a ToolTip appears showing the error description string.&lt;/p&gt;
&lt;p&gt;Typically, you use ErrorProvider in association with data-bound controls. When using ErrorProvider with data-bound controls, you must specify the ContainerControl, either in the constructor or by setting the ContainerControl property.&lt;/p&gt;
&lt;p&gt;The Visual Studio project download at the link above demonstrates how to combine validation with the ErrorProvider.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style="margin-top:0px;margin-bottom:0px;"&gt;&lt;span style="font-family:Verdana;"&gt;Mike McIntyre&amp;#39;s &lt;span style="font-family:Verdana;"&gt;&lt;a target="_blank" href="http://cs.vbcity.com/blogs/mike-mcintyre/default.aspx" class="null"&gt;&lt;span style="color:#666666;"&gt;.Net Journal&lt;/span&gt;&lt;/a&gt;&lt;/span&gt;&lt;/span&gt; &lt;/p&gt;
&lt;p style="margin-top:0px;margin-bottom:0px;"&gt;&lt;span style="font-family:Verdana;"&gt;&lt;a target="_blank" href="http://www.getdotnetcode.com/" class="null"&gt;&lt;span style="color:#000000;"&gt;getdotnetcode.com&lt;/span&gt;&lt;/a&gt;&lt;/span&gt;&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://cs.vbcity.com/aggbug.aspx?PostID=247" width="1" height="1"&gt;</description><category domain="http://cs.vbcity.com/blogs/mike-mcintyre/archive/tags/WindowsForms/default.aspx">WindowsForms</category><category domain="http://cs.vbcity.com/blogs/mike-mcintyre/archive/tags/ErrorProvider/default.aspx">ErrorProvider</category></item><item><title>Visual Basic 2010 - Nullable Optional Parameters</title><link>http://cs.vbcity.com/blogs/mike-mcintyre/archive/2009/10/10/visual-basic-2010-nullable-optional-parameters.aspx</link><pubDate>Sat, 10 Oct 2009 20:40:00 GMT</pubDate><guid isPermaLink="false">921a0936-6df9-4a08-8006-68f3b1747f32:246</guid><dc:creator>Mike McIntyre</dc:creator><slash:comments>0</slash:comments><description>&lt;p&gt;&amp;nbsp;Nullable types were a welcome addition to Visual Basic 2008.&amp;nbsp; In Visual Basic 2010 you can use them as parameters.&amp;nbsp; Here are two examples:&lt;/p&gt;
&lt;p style="MARGIN:0in 0in 0pt;mso-layout-grid-align:none;" class="MsoNormal"&gt;&lt;span style="FONT-SIZE:9.5pt;FONT-FAMILY:Consolas;mso-bidi-font-family:Consolas;"&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="COLOR:green;"&gt;&amp;#39; Assign Nothing as the default value for nullable optional parameter.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="MARGIN:0in 0in 0pt;mso-layout-grid-align:none;" class="MsoNormal"&gt;&lt;span style="FONT-SIZE:9.5pt;FONT-FAMILY:Consolas;mso-bidi-font-family:Consolas;"&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="COLOR:blue;"&gt;Sub&lt;/span&gt; Add(&lt;span style="COLOR:blue;"&gt;ByVal&lt;/span&gt; x &lt;span style="COLOR:blue;"&gt;As&lt;/span&gt; &lt;span style="COLOR:blue;"&gt;Integer&lt;/span&gt;, &lt;span style="COLOR:blue;"&gt;ByVal&lt;/span&gt; y &lt;span style="COLOR:blue;"&gt;As&lt;/span&gt; &lt;span style="COLOR:blue;"&gt;Integer&lt;/span&gt;, &lt;span style="COLOR:blue;"&gt;Optional&lt;/span&gt; &lt;span style="COLOR:blue;"&gt;ByVal&lt;/span&gt; z &lt;span style="COLOR:blue;"&gt;As&lt;/span&gt; &lt;span style="COLOR:blue;"&gt;Integer&lt;/span&gt;? = &lt;span style="COLOR:blue;"&gt;Nothing&lt;/span&gt;)&lt;/span&gt;&lt;/p&gt;
&lt;p style="MARGIN:0in 0in 0pt;mso-layout-grid-align:none;" class="MsoNormal"&gt;&lt;span style="FONT-SIZE:9.5pt;FONT-FAMILY:Consolas;mso-bidi-font-family:Consolas;"&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="COLOR:green;"&gt;&amp;#39; code removed for brevity&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="MARGIN:0in 0in 0pt;mso-layout-grid-align:none;" class="MsoNormal"&gt;&lt;span style="FONT-SIZE:9.5pt;FONT-FAMILY:Consolas;mso-bidi-font-family:Consolas;"&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="COLOR:blue;"&gt;End&lt;/span&gt; &lt;span style="COLOR:blue;"&gt;Sub&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="MARGIN:0in 0in 0pt;mso-layout-grid-align:none;" class="MsoNormal"&gt;&lt;span style="FONT-SIZE:9.5pt;FONT-FAMILY:Consolas;mso-bidi-font-family:Consolas;"&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p style="MARGIN:0in 0in 0pt;mso-layout-grid-align:none;" class="MsoNormal"&gt;&lt;span style="FONT-SIZE:9.5pt;FONT-FAMILY:Consolas;mso-bidi-font-family:Consolas;"&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="COLOR:green;"&gt;&amp;#39; Assign an integer value to a nullable optional paramter of type Double.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="MARGIN:0in 0in 0pt;mso-layout-grid-align:none;" class="MsoNormal"&gt;&lt;span style="FONT-SIZE:9.5pt;FONT-FAMILY:Consolas;mso-bidi-font-family:Consolas;"&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="COLOR:blue;"&gt;Sub&lt;/span&gt; Process(&lt;span style="COLOR:blue;"&gt;ByVal&lt;/span&gt; x &lt;span style="COLOR:blue;"&gt;As&lt;/span&gt; &lt;span style="COLOR:blue;"&gt;Integer&lt;/span&gt;, &lt;span style="COLOR:blue;"&gt;ByVal&lt;/span&gt; y &lt;span style="COLOR:blue;"&gt;As&lt;/span&gt; &lt;span style="COLOR:blue;"&gt;Integer&lt;/span&gt;, &lt;span style="COLOR:blue;"&gt;Optional&lt;/span&gt; &lt;span style="COLOR:blue;"&gt;ByVal&lt;/span&gt; z &lt;span style="COLOR:blue;"&gt;As&lt;/span&gt; &lt;span style="COLOR:blue;"&gt;Double&lt;/span&gt;? = 4)&lt;/span&gt;&lt;/p&gt;
&lt;p style="MARGIN:0in 0in 0pt;mso-layout-grid-align:none;" class="MsoNormal"&gt;&lt;span style="FONT-SIZE:9.5pt;FONT-FAMILY:Consolas;mso-bidi-font-family:Consolas;"&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="COLOR:green;"&gt;&amp;#39; code removed for brevity&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="MARGIN:0in 0in 0pt;" class="MsoNormal"&gt;&lt;span style="FONT-SIZE:9.5pt;FONT-FAMILY:Consolas;mso-bidi-font-family:Consolas;"&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="COLOR:blue;"&gt;End&lt;/span&gt; &lt;span style="COLOR:blue;"&gt;Sub&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style="margin-top:0px;margin-bottom:0px;"&gt;&lt;span style="font-family:Verdana;"&gt;Mike McIntyre&amp;#39;s &lt;span style="font-family:Verdana;"&gt;&lt;a target="_blank" href="http://cs.vbcity.com/blogs/mike-mcintyre/default.aspx" class="null"&gt;&lt;span style="color:#666666;"&gt;.Net Journal&lt;/span&gt;&lt;/a&gt;&lt;/span&gt;&lt;/span&gt; &lt;/p&gt;
&lt;p style="margin-top:0px;margin-bottom:0px;"&gt;&lt;span style="font-family:Verdana;"&gt;&lt;a target="_blank" href="http://www.getdotnetcode.com/" class="null"&gt;&lt;span style="color:#000000;"&gt;getdotnetcode.com&lt;/span&gt;&lt;/a&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin-top:0px;margin-bottom:0px;"&gt;&lt;span style="font-family:Verdana;"&gt;&lt;/span&gt;&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://cs.vbcity.com/aggbug.aspx?PostID=246" width="1" height="1"&gt;</description><category domain="http://cs.vbcity.com/blogs/mike-mcintyre/archive/tags/visual+basic+2010/default.aspx">visual basic 2010</category><category domain="http://cs.vbcity.com/blogs/mike-mcintyre/archive/tags/nullable+optional+parameters/default.aspx">nullable optional parameters</category></item><item><title>Visual Basic 2010 - Array Literals</title><link>http://cs.vbcity.com/blogs/mike-mcintyre/archive/2009/10/08/visual-basic-2010-array-literals.aspx</link><pubDate>Thu, 08 Oct 2009 20:30:00 GMT</pubDate><guid isPermaLink="false">921a0936-6df9-4a08-8006-68f3b1747f32:245</guid><dc:creator>Mike McIntyre</dc:creator><slash:comments>0</slash:comments><description> Visual Basic 2010 array litererals provide a shortcut mechanism for declaring and filling arrays for types that can be inferred by the compiler.  Here a three examples:

        &amp;#39; Examples

        Dim a = {1, 2, 3} &amp;#39;infers Integer()

        Dim b = {1, 2, 3.5} &amp;#39;infers Double()

        Dim c = {&amp;quot;1&amp;quot;, &amp;quot;2&amp;quot;, &amp;quot;3&amp;quot;} &amp;#39;infers String()

Becareful not to mix in types the compiler can not infer: 


        &amp;#39; WARNING: Make sure you used types that can be inferred.

        &amp;#39; The next example will generation a warning if OPTION STRICT ON

        &amp;#39;   or infer a type of Object if OPTION STRICT OFF

        Dim d = {1, &amp;quot;123&amp;quot;} &amp;#39;infers Object() (warning with Option Strict On)


Create multidimensional arrays with array literals:


        &amp;#39; Create multidimensional arrays by nesting array array literals:

        &amp;#39;Nested array literals can be used to produce multidimensional arrays:

        Dim f = {{1, 2, 3}, {4, 5, 6}} &amp;#39;infers Integer(,)

        Dim g = {({1, 2, 3}), ({4, 5, 6})} &amp;#39;infers Integer()() (jagged array)

...(&lt;a href="http://cs.vbcity.com/blogs/mike-mcintyre/archive/2009/10/08/visual-basic-2010-array-literals.aspx"&gt;read more&lt;/a&gt;)&lt;img src="http://cs.vbcity.com/aggbug.aspx?PostID=245" width="1" height="1"&gt;</description><category domain="http://cs.vbcity.com/blogs/mike-mcintyre/archive/tags/visual+basic+10/default.aspx">visual basic 10</category><category domain="http://cs.vbcity.com/blogs/mike-mcintyre/archive/tags/Visual+Studio+2010/default.aspx">Visual Studio 2010</category><category domain="http://cs.vbcity.com/blogs/mike-mcintyre/archive/tags/array+literal/default.aspx">array literal</category></item><item><title>Visual Basic 2010 - Multiline Function Lambdas</title><link>http://cs.vbcity.com/blogs/mike-mcintyre/archive/2009/10/06/visual-basic-2010-multiline-function-lambdas.aspx</link><pubDate>Tue, 06 Oct 2009 20:07:00 GMT</pubDate><guid isPermaLink="false">921a0936-6df9-4a08-8006-68f3b1747f32:244</guid><dc:creator>Mike McIntyre</dc:creator><slash:comments>0</slash:comments><description>A multiline Function lambda is a lambda expression that represents a Function containing one or more statements. 



The “Function” keyword can be used to create a multiline lambda that returns a value.  The following examples how to create mutiline Function lambdas.  The first creates a multiline Function lambda and assigns it to a variable.  The second uses a multiline Function lamda inline.
...(&lt;a href="http://cs.vbcity.com/blogs/mike-mcintyre/archive/2009/10/06/visual-basic-2010-multiline-function-lambdas.aspx"&gt;read more&lt;/a&gt;)&lt;img src="http://cs.vbcity.com/aggbug.aspx?PostID=244" width="1" height="1"&gt;</description><category domain="http://cs.vbcity.com/blogs/mike-mcintyre/archive/tags/Multiline/default.aspx">Multiline</category><category domain="http://cs.vbcity.com/blogs/mike-mcintyre/archive/tags/lambda/default.aspx">lambda</category><category domain="http://cs.vbcity.com/blogs/mike-mcintyre/archive/tags/function/default.aspx">function</category></item><item><title>Visual Basic 2010 - Multiline Sub Lambdas</title><link>http://cs.vbcity.com/blogs/mike-mcintyre/archive/2009/10/05/visual-basic-2010-multiline-sub-lambdas.aspx</link><pubDate>Mon, 05 Oct 2009 19:52:00 GMT</pubDate><guid isPermaLink="false">921a0936-6df9-4a08-8006-68f3b1747f32:243</guid><dc:creator>Mike McIntyre</dc:creator><slash:comments>0</slash:comments><description>A multiline Sub lambda is a lambda expression that represents a Sub containing one or more statements.  

Visual Basic 9.0 only supported lambdas that were a single expression that returned a value; for example, the following line was an error:

 

    &amp;#39;Error - Console.WriteLine doesn&amp;#39;t return a value

    Array.ForEach(nums, Function(n) Console.WriteLine(n))

 

With Visual Basic 10.0, lambdas can now contain expressions that do not return a value:

...(&lt;a href="http://cs.vbcity.com/blogs/mike-mcintyre/archive/2009/10/05/visual-basic-2010-multiline-sub-lambdas.aspx"&gt;read more&lt;/a&gt;)&lt;img src="http://cs.vbcity.com/aggbug.aspx?PostID=243" width="1" height="1"&gt;</description><category domain="http://cs.vbcity.com/blogs/mike-mcintyre/archive/tags/visual+basic+10/default.aspx">visual basic 10</category><category domain="http://cs.vbcity.com/blogs/mike-mcintyre/archive/tags/lambda/default.aspx">lambda</category><category domain="http://cs.vbcity.com/blogs/mike-mcintyre/archive/tags/sub+lambda/default.aspx">sub lambda</category></item><item><title>VB 20010 - Continuing a Statement over Multiple Lines after a Comma</title><link>http://cs.vbcity.com/blogs/mike-mcintyre/archive/2009/10/04/vb-20010-continuing-a-statement-over-multiple-lines-after-a-comma.aspx</link><pubDate>Sun, 04 Oct 2009 18:35:00 GMT</pubDate><guid isPermaLink="false">921a0936-6df9-4a08-8006-68f3b1747f32:242</guid><dc:creator>Mike McIntyre</dc:creator><slash:comments>0</slash:comments><description>Visual Basic 2010 provides mechanisms to continue lines of a statment without the traditional _ (underline) character.

One mechanism is to contiue the statement on a new line after a comma......
...(&lt;a href="http://cs.vbcity.com/blogs/mike-mcintyre/archive/2009/10/04/vb-20010-continuing-a-statement-over-multiple-lines-after-a-comma.aspx"&gt;read more&lt;/a&gt;)&lt;img src="http://cs.vbcity.com/aggbug.aspx?PostID=242" width="1" height="1"&gt;</description><category domain="http://cs.vbcity.com/blogs/mike-mcintyre/archive/tags/line+continuation/default.aspx">line continuation</category></item><item><title>MS SQL Server - Use Transact SQL CASE Expression To Sort Query Results</title><link>http://cs.vbcity.com/blogs/mike-mcintyre/archive/2009/09/28/ms-sql-server-use-transace-sql-case-expression-sort-query-results.aspx</link><pubDate>Tue, 29 Sep 2009 03:00:00 GMT</pubDate><guid isPermaLink="false">921a0936-6df9-4a08-8006-68f3b1747f32:240</guid><dc:creator>Mike McIntyre</dc:creator><slash:comments>0</slash:comments><description>The transact SQL &amp;#39;CASE&amp;#39; expression is useful for a lot of things but did you know you can use it to sort your query results in special ways? Here&amp;#39;s a simple example......(&lt;a href="http://cs.vbcity.com/blogs/mike-mcintyre/archive/2009/09/28/ms-sql-server-use-transace-sql-case-expression-sort-query-results.aspx"&gt;read more&lt;/a&gt;)&lt;img src="http://cs.vbcity.com/aggbug.aspx?PostID=240" width="1" height="1"&gt;</description><category domain="http://cs.vbcity.com/blogs/mike-mcintyre/archive/tags/sql/default.aspx">sql</category><category domain="http://cs.vbcity.com/blogs/mike-mcintyre/archive/tags/CASE/default.aspx">CASE</category><category domain="http://cs.vbcity.com/blogs/mike-mcintyre/archive/tags/sort/default.aspx">sort</category></item><item><title>Case Insentive Comparrisons with Visual Basic</title><link>http://cs.vbcity.com/blogs/mike-mcintyre/archive/2009/09/27/case-insentive-comparrisons-with-visual-basic.aspx</link><pubDate>Sun, 27 Sep 2009 17:50:00 GMT</pubDate><guid isPermaLink="false">921a0936-6df9-4a08-8006-68f3b1747f32:236</guid><dc:creator>Mike McIntyre</dc:creator><slash:comments>0</slash:comments><description> The .Net String class&amp;#39; ToUpper function can be used with Visual Basic code for case insensitve comparrisons.  Here&amp;#39;s an example:...(&lt;a href="http://cs.vbcity.com/blogs/mike-mcintyre/archive/2009/09/27/case-insentive-comparrisons-with-visual-basic.aspx"&gt;read more&lt;/a&gt;)&lt;img src="http://cs.vbcity.com/aggbug.aspx?PostID=236" width="1" height="1"&gt;</description><category domain="http://cs.vbcity.com/blogs/mike-mcintyre/archive/tags/case+insensitive/default.aspx">case insensitive</category><category domain="http://cs.vbcity.com/blogs/mike-mcintyre/archive/tags/ToUpper/default.aspx">ToUpper</category><category domain="http://cs.vbcity.com/blogs/mike-mcintyre/archive/tags/String/default.aspx">String</category></item><item><title>Sorting and Grouping Items in a WPF ListBox - Part 2</title><link>http://cs.vbcity.com/blogs/xtab/archive/2009/09/27/sorting-and-grouping-items-in-a-wpf-listbox-part-2.aspx</link><pubDate>Sun, 27 Sep 2009 10:13:00 GMT</pubDate><guid isPermaLink="false">921a0936-6df9-4a08-8006-68f3b1747f32:237</guid><dc:creator>XTab</dc:creator><slash:comments>0</slash:comments><description>&lt;p&gt;&lt;span style="font-family:Calibri;"&gt;&lt;/span&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;/p&gt;
&lt;p&gt;&lt;span style="text-decoration:underline;"&gt;Introduction&lt;/span&gt;&lt;br /&gt;In the &lt;a href="http://cs.vbcity.com/blogs/xtab/archive/2009/09/27/how-to-sort-and-group-listitems-in-a-wpf-listbox.aspx"&gt;first part&lt;/a&gt;, I outlined the sample application and said that it: &lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;will create a collection of Person objects and databind them to a ListBox. &lt;/li&gt;
&lt;li&gt;will use very simple DataTemplates to format two properties of the Person class - FullName and Status. &lt;/li&gt;
&lt;li&gt;will use a GroupStyle HeaderTemplate to display a third property of the Person class - Category. &lt;/li&gt;
&lt;li&gt;groups the Person objects by their Category property. &lt;/li&gt;
&lt;li&gt;sorts the Categories and displays them in alphabetical order. &lt;/li&gt;
&lt;li&gt;sorts the Persons by name inside the Category groups and displays them in alphabetical order.&amp;nbsp;&amp;nbsp;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;The first five tasks are all covered in that previous part. You can download the project up to this point from &lt;a href="http://www.xtabvbcity.plus.com/Blogs/WPFSortGroup/GroupAndSort_Blog.zip"&gt;here&lt;/a&gt;. &lt;/p&gt;
&lt;p&gt;&lt;span style="text-decoration:underline;"&gt;Sorting the Categories&lt;/span&gt;&lt;br /&gt;In the same way that I used a Group Description to group items together, WPF offers the SortDescription to allow data inside the CollectionView to be sorted. The following code in the Window Loaded event is all that&amp;#39;s needed: &lt;/p&gt;
&lt;div style="font-family:Courier New;font-size:10pt;color:black;background:white;"&gt;
&lt;p style="margin:0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; currentView.SortDescriptions.Add(&lt;span style="color:#0000ff;"&gt;New&lt;/span&gt; SortDescription(&lt;span style="color:#a31515;"&gt;&amp;quot;Category&amp;quot;&lt;/span&gt;, ListSortDirection.Ascending))&lt;/p&gt;
&lt;/div&gt;
&lt;p&gt;The SortDescription takes two parameters. The first is the name of the property that you want to sort on. The second is one of two choices for the sort direction.&lt;/p&gt;
&lt;p&gt;For completeness, this is the full code so far in the Window Loaded event (which creates the DataContext, the View, the GroupDescription and the SortDescription):&lt;/p&gt;
&lt;div style="font-family:Courier New;font-size:10pt;color:black;background:white;"&gt;
&lt;p style="margin:0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color:#0000ff;"&gt;Private&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;Sub&lt;/span&gt; Window1_Loaded(&lt;span style="color:#0000ff;"&gt;ByVal&lt;/span&gt; sender &lt;span style="color:#0000ff;"&gt;As&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;Object&lt;/span&gt;, &lt;span style="color:#0000ff;"&gt;ByVal&lt;/span&gt; e &lt;span style="color:#0000ff;"&gt;As&lt;/span&gt; System.Windows.RoutedEventArgs) &lt;span style="color:#0000ff;"&gt;Handles&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;Me&lt;/span&gt;.Loaded&lt;/p&gt;
&lt;p style="margin:0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; Contacts = Person.GetPersons&lt;/p&gt;
&lt;p style="margin:0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color:#0000ff;"&gt;Me&lt;/span&gt;.DataContext = Contacts&lt;/p&gt;
&lt;p style="margin:0px;"&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style="margin:0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color:#0000ff;"&gt;Dim&lt;/span&gt; currentView &lt;span style="color:#0000ff;"&gt;As&lt;/span&gt; ICollectionView&lt;/p&gt;
&lt;p style="margin:0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; currentView = CollectionViewSource.GetDefaultView(Contacts)&lt;/p&gt;
&lt;p style="margin:0px;"&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style="margin:0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color:#008000;"&gt;&amp;#39;&amp;nbsp; Group&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin:0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; currentView.GroupDescriptions.Add(&lt;span style="color:#0000ff;"&gt;New&lt;/span&gt; PropertyGroupDescription(&lt;span style="color:#a31515;"&gt;&amp;quot;Category&amp;quot;&lt;/span&gt;))&lt;/p&gt;
&lt;p style="margin:0px;"&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style="margin:0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color:#008000;"&gt;&amp;#39;&amp;nbsp;&amp;nbsp; Sort Categories&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin:0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; currentView.SortDescriptions.Add(&lt;span style="color:#0000ff;"&gt;New&lt;/span&gt; SortDescription(&lt;span style="color:#a31515;"&gt;&amp;quot;Category&amp;quot;&lt;/span&gt;, ListSortDirection.Ascending))&lt;/p&gt;
&lt;p style="margin:0px;"&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style="margin:0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color:#0000ff;"&gt;End&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;Sub&lt;/span&gt;&lt;/p&gt;
&lt;/div&gt;
&lt;p&gt;The sorted Categories will look like this:&lt;/p&gt;
&lt;p&gt;&amp;nbsp; &lt;img src="http://www.xtabvbcity.plus.com/Blogs/WPFSortGroup/SortGroup6.png" alt="" /&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="text-decoration:underline;"&gt;Sorting the ListItems&lt;/span&gt;&lt;br /&gt;As you can see, the Categories are now in alphabetical order. The names of the Person objects however are still shown in the relative order in which they were created. To create this secondary sort, the same kind of code is used: &lt;/p&gt;
&lt;div style="font-family:Courier New;font-size:10pt;color:black;background:white;"&gt;
&lt;p style="margin:0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; currentView.SortDescriptions.Add(&lt;span style="color:#0000ff;"&gt;New&lt;/span&gt; SortDescription(&lt;span style="color:#a31515;"&gt;&amp;quot;FullName&amp;quot;&lt;/span&gt;, ListSortDirection.Ascending))&lt;/p&gt;
&lt;/div&gt;
&lt;p&gt;The resulting display is:&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&amp;nbsp;&lt;img src="http://www.xtabvbcity.plus.com/Blogs/WPFSortGroup/SortGroup7.png" alt="" /&gt;&lt;/p&gt;
&lt;p&gt;The clearest example is where you can see the three items in the &amp;#39;Work Colleagues&amp;#39; Category. They are now sorted alphabetically. &lt;br /&gt;&lt;br /&gt;Note that the order that you list the sorting tasks is important. If you were to reverse the order:&lt;/p&gt;
&lt;div style="font-family:Courier New;font-size:10pt;color:black;background:white;"&gt;
&lt;p style="margin:0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &lt;span style="color:#008000;"&gt;&amp;#39;&amp;nbsp;&amp;nbsp; Sort individual names&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin:0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; currentView.SortDescriptions.Add(&lt;span style="color:#0000ff;"&gt;New&lt;/span&gt; SortDescription(&lt;span style="color:#a31515;"&gt;&amp;quot;FullName&amp;quot;&lt;/span&gt;, ListSortDirection.Ascending))&lt;/p&gt;
&lt;p style="margin:0px;"&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style="margin:0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color:#008000;"&gt;&amp;#39;&amp;nbsp;&amp;nbsp; Sort Categories&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin:0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; currentView.SortDescriptions.Add(&lt;span style="color:#0000ff;"&gt;New&lt;/span&gt; SortDescription(&lt;span style="color:#a31515;"&gt;&amp;quot;Category&amp;quot;&lt;/span&gt;, ListSortDirection.Ascending))&lt;/p&gt;
&lt;p style="margin:0px;"&gt;&amp;nbsp;&lt;/p&gt;
&lt;/div&gt;
&lt;p&gt;You would effectively lose the Category sort.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&amp;nbsp;&lt;img src="http://www.xtabvbcity.plus.com/Blogs/WPFSortGroup/SortGroup8.png" alt="" /&gt;&lt;/p&gt;
&lt;p&gt;It is possible to create and apply the grouping and sorting in XAML, but I always try as far as possible to handle these kind of tasks in code-behind. Equally, I try and use XAML for the actual graphical display. There isn&amp;#39;t a clear line between the two sometimes, of course, and you have to allow for individual preferences, but I try and keep to this approach as a general rule. &lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://cs.vbcity.com/aggbug.aspx?PostID=237" width="1" height="1"&gt;</description><category domain="http://cs.vbcity.com/blogs/xtab/archive/tags/WPF/default.aspx">WPF</category><category domain="http://cs.vbcity.com/blogs/xtab/archive/tags/Visual+Basic/default.aspx">Visual Basic</category><category domain="http://cs.vbcity.com/blogs/xtab/archive/tags/Sort/default.aspx">Sort</category><category domain="http://cs.vbcity.com/blogs/xtab/archive/tags/DataBinding/default.aspx">DataBinding</category><category domain="http://cs.vbcity.com/blogs/xtab/archive/tags/ListBox/default.aspx">ListBox</category><category domain="http://cs.vbcity.com/blogs/xtab/archive/tags/Group/default.aspx">Group</category></item><item><title>Read a Comma Delimited File with the Visual BasicTextFieldParser Class</title><link>http://cs.vbcity.com/blogs/mike-mcintyre/archive/2009/09/26/read-a-comma-delimited-file-with-the-visual-basictextfieldparser-class.aspx</link><pubDate>Sat, 26 Sep 2009 14:42:00 GMT</pubDate><guid isPermaLink="false">921a0936-6df9-4a08-8006-68f3b1747f32:234</guid><dc:creator>Mike McIntyre</dc:creator><slash:comments>0</slash:comments><description>This blog post provides an example that shows how to use the VisualBasic TextFieldParser class to read in data from a comma delimited files....(&lt;a href="http://cs.vbcity.com/blogs/mike-mcintyre/archive/2009/09/26/read-a-comma-delimited-file-with-the-visual-basictextfieldparser-class.aspx"&gt;read more&lt;/a&gt;)&lt;img src="http://cs.vbcity.com/aggbug.aspx?PostID=234" width="1" height="1"&gt;</description><category domain="http://cs.vbcity.com/blogs/mike-mcintyre/archive/tags/delimited/default.aspx">delimited</category><category domain="http://cs.vbcity.com/blogs/mike-mcintyre/archive/tags/text/default.aspx">text</category><category domain="http://cs.vbcity.com/blogs/mike-mcintyre/archive/tags/TextFieldParser/default.aspx">TextFieldParser</category><category domain="http://cs.vbcity.com/blogs/mike-mcintyre/archive/tags/file/default.aspx">file</category></item></channel></rss>