<?xml version="1.0" encoding="UTF-8" ?>
<?xml-stylesheet type="text/xsl" href="http://blogs.infragistics.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/"><channel><title>Infragistics Blogs</title><link>http://blogs.infragistics.com/blogs/default.aspx?Language=en</link><description /><dc:language>en</dc:language><generator>CommunityServer 2.1 SP2 (Build: 61129.1)</generator><item><title>Synchronizing Field Widths between FieldLayouts in XamDataGrid</title><link>http://blogs.infragistics.com/blogs/joshs/archive/2008/07/02/synchronizing-field-widths-between-fieldlayouts-in-xamdatagrid.aspx</link><pubDate>Wed, 02 Jul 2008 20:55:00 GMT</pubDate><guid isPermaLink="false">7a8b7c76-b7ad-48e0-9694-5b04ca132ed0:15694</guid><dc:creator>Joshua Smith</dc:creator><slash:comments>1</slash:comments><description>&lt;p&gt;This blog post shows how to force the width of Fields in a
child FieldLayout to have the same width as the Fields in the parent/master
FieldLayout.&amp;nbsp; This is a stopgap solution,
useful only until XamDataGrid has native support for this feature.&amp;nbsp; The desired result is that the XamDataGrid's
top-level records have resizable cells, and the non-resizable cells in child records
keep their widths the same as the corresponding cells in their parent record.&amp;nbsp; Also, we will align the text in the child records
with the text in the parent record, so that the XamDataGrid ends up looking
like this:&lt;/p&gt;

&lt;p&gt;&lt;img src="http://users.infragistics.com/joshs/xamDataGrid_syncFieldWidths.png"&gt;&lt;br&gt;&lt;/p&gt;

&lt;p&gt;In the screenshot above, the XamDataGrid has two master
records, each of which represent a country.&amp;nbsp;
The master records have child records, which represent states or cities
within that country.&amp;nbsp; Every location in
the grid has a name and a description, so it makes sense to keep all of the fields
the same width and have their values line up.&amp;nbsp;
This technique uses the hierarchical display support of XamDataGrid to
provide a clean, simple listing of hierarchical data.&amp;nbsp; In addition, if you were to adjust the width
of the Field headers or cells in a master record, the corresponding cells in
the detail records would resize to the same width.&lt;/p&gt;

&lt;p&gt;First, let's examine the XAML in the demo application's main
Window that configures the XamDataGrid.&amp;nbsp;
The most important parts are &lt;b&gt;bold&lt;/b&gt;:&lt;/p&gt;&amp;lt;igDP:XamDataGrid &lt;br&gt;&amp;nbsp; x:Name="xamDataGrid"&lt;br&gt;&amp;nbsp; DataSource="{Binding}"&lt;br&gt;&amp;nbsp; &lt;span style="font-weight:bold;"&gt;FieldLayoutInitialized="xamDataGrid_FieldLayoutInitialized"&lt;/span&gt;&lt;br&gt;&amp;nbsp; GroupByAreaLocation="None"&lt;br&gt;&amp;nbsp; &amp;gt;&lt;br&gt;&lt;br&gt;&amp;nbsp; &amp;lt;igDP:XamDataGrid.Resources&amp;gt;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="font-weight:bold;"&gt;&amp;lt;!-- &lt;/span&gt;&lt;br style="font-weight:bold;"&gt;&lt;span style="font-weight:bold;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; This Style enables us to monitor changes to field widths.&lt;/span&gt;&lt;br style="font-weight:bold;"&gt;&lt;span style="font-weight:bold;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; --&amp;gt;&lt;/span&gt;&lt;br style="font-weight:bold;"&gt;&lt;span style="font-weight:bold;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;Style TargetType="{x:Type igDP:LabelPresenter}"&amp;gt;&lt;/span&gt;&lt;br style="font-weight:bold;"&gt;&lt;span style="font-weight:bold;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;EventSetter&lt;/span&gt;&lt;br style="font-weight:bold;"&gt;&lt;span style="font-weight:bold;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Event="SizeChanged" &lt;/span&gt;&lt;br style="font-weight:bold;"&gt;&lt;span style="font-weight:bold;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Handler="OnLabelPresenterSizeChanged" &lt;/span&gt;&lt;br style="font-weight:bold;"&gt;&lt;span style="font-weight:bold;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; /&amp;gt;&lt;/span&gt;&lt;br style="font-weight:bold;"&gt;&lt;span style="font-weight:bold;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;/Style&amp;gt;&lt;/span&gt;&lt;br&gt;&amp;nbsp; &amp;lt;/igDP:XamDataGrid.Resources&amp;gt;&lt;br&gt;&lt;br&gt;&amp;nbsp; &amp;lt;igDP:XamDataGrid.DataContext&amp;gt;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;ObjectDataProvider &lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; MethodName="GetData" &lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ObjectType="{x:Type local:DataSource}" &lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; /&amp;gt;&lt;br&gt;&amp;nbsp; &amp;lt;/igDP:XamDataGrid.DataContext&amp;gt;&lt;br&gt;&lt;br&gt;&amp;nbsp; &amp;lt;igDP:XamDataGrid.FieldLayouts&amp;gt;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;igDP:FieldLayout Key="master"&amp;gt;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;igDP:FieldLayout.Fields&amp;gt;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;igDP:Field Name="ID" Visibility="Collapsed" /&amp;gt;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;igDP:Field Name="Name" /&amp;gt;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;igDP:Field Name="Description"&amp;gt;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;igDP:Field.Settings&amp;gt;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;igDP:FieldSettings LabelWidth="260" CellWidth="260" /&amp;gt;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;/igDP:Field.Settings&amp;gt;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;/igDP:Field&amp;gt;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;/igDP:FieldLayout.Fields&amp;gt;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;igDP:FieldLayout.FieldSettings&amp;gt;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;igDP:FieldSettings&amp;gt;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;igDP:FieldSettings.CellValuePresenterStyle&amp;gt;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;Style TargetType="{x:Type igDP:CellValuePresenter}"&amp;gt;&lt;br&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;lt;Setter Property="FontWeight" Value="Bold" /&amp;gt;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;/Style&amp;gt;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;/igDP:FieldSettings.CellValuePresenterStyle&amp;gt;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;/igDP:FieldSettings&amp;gt;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;/igDP:FieldLayout.FieldSettings&amp;gt;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;/igDP:FieldLayout&amp;gt;&lt;br&gt;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;igDP:FieldLayout Key="detail"&amp;gt;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;igDP:FieldLayout.Fields&amp;gt;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;igDP:Field Name="ParentID" Visibility="Collapsed" /&amp;gt;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;igDP:Field Name="Name" /&amp;gt;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;igDP:Field Name="Description" /&amp;gt;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;/igDP:FieldLayout.Fields&amp;gt;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;igDP:FieldLayout.FieldSettings&amp;gt;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;igDP:FieldSettings AllowResize="False" LabelMaxHeight="0"&amp;gt;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="font-weight:bold;"&gt;&amp;lt;igDP:FieldSettings.CellValuePresenterStyle&amp;gt;&lt;/span&gt;&lt;br style="font-weight:bold;"&gt;&lt;span style="font-weight:bold;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;!-- &lt;/span&gt;&lt;br style="font-weight:bold;"&gt;&lt;span style="font-weight:bold;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; This Style aligns the child record cell text with the parent cells&lt;/span&gt;&lt;br style="font-weight:bold;"&gt;&lt;span style="font-weight:bold;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; regardless of whether the record is selected, mouseover, etc.&lt;/span&gt;&lt;br style="font-weight:bold;"&gt;&lt;span style="font-weight:bold;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; --&amp;gt;&lt;/span&gt;&lt;br style="font-weight:bold;"&gt;&lt;span style="font-weight:bold;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;Style TargetType="{x:Type igDP:CellValuePresenter}"&amp;gt;&lt;/span&gt;&lt;br style="font-weight:bold;"&gt;&lt;span style="font-weight:bold;"&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;lt;Setter Property="Margin" Value="-3,0,0,0" /&amp;gt;&lt;/span&gt;&lt;br style="font-weight:bold;"&gt;&lt;span style="font-weight:bold;"&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;lt;Style.Triggers&amp;gt;&lt;/span&gt;&lt;br style="font-weight:bold;"&gt;&lt;span style="font-weight:bold;"&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;lt;DataTrigger &lt;/span&gt;&lt;br style="font-weight:bold;"&gt;&lt;span style="font-weight:bold;"&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; Binding="{Binding &lt;/span&gt;&lt;br style="font-weight:bold;"&gt;&lt;span style="font-weight:bold;"&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; RelativeSource={RelativeSource AncestorType={x:Type igDP:DataRecordPresenter}}, &lt;/span&gt;&lt;br style="font-weight:bold;"&gt;&lt;span style="font-weight:bold;"&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; Path=IsMouseOver}" &lt;/span&gt;&lt;br style="font-weight:bold;"&gt;&lt;span style="font-weight:bold;"&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; Value="True"&lt;/span&gt;&lt;br style="font-weight:bold;"&gt;&lt;span style="font-weight:bold;"&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;gt;&lt;/span&gt;&lt;br style="font-weight:bold;"&gt;&lt;span style="font-weight:bold;"&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;lt;Setter Property="Margin" Value="-3,0,0,0" /&amp;gt;&lt;/span&gt;&lt;br style="font-weight:bold;"&gt;&lt;span style="font-weight:bold;"&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;lt;/DataTrigger&amp;gt;&lt;/span&gt;&lt;br style="font-weight:bold;"&gt;&lt;span style="font-weight:bold;"&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;lt;DataTrigger &lt;/span&gt;&lt;br style="font-weight:bold;"&gt;&lt;span style="font-weight:bold;"&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; Binding="{Binding &lt;/span&gt;&lt;br style="font-weight:bold;"&gt;&lt;span style="font-weight:bold;"&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; RelativeSource={RelativeSource AncestorType={x:Type igDP:DataRecordPresenter}}, &lt;/span&gt;&lt;br style="font-weight:bold;"&gt;&lt;span style="font-weight:bold;"&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; Path=IsSelected}" &lt;/span&gt;&lt;br style="font-weight:bold;"&gt;&lt;span style="font-weight:bold;"&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; Value="True"&lt;/span&gt;&lt;br style="font-weight:bold;"&gt;&lt;span style="font-weight:bold;"&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;gt;&lt;/span&gt;&lt;br style="font-weight:bold;"&gt;&lt;span style="font-weight:bold;"&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;lt;Setter Property="Margin" Value="-3,0,0,0" /&amp;gt;&lt;/span&gt;&lt;br style="font-weight:bold;"&gt;&lt;span style="font-weight:bold;"&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;lt;/DataTrigger&amp;gt;&lt;/span&gt;&lt;br style="font-weight:bold;"&gt;&lt;span style="font-weight:bold;"&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;lt;/Style.Triggers&amp;gt;&lt;/span&gt;&lt;br style="font-weight:bold;"&gt;&lt;span style="font-weight:bold;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;/Style&amp;gt;&lt;/span&gt;&lt;br style="font-weight:bold;"&gt;&lt;span style="font-weight:bold;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;/igDP:FieldSettings.CellValuePresenterStyle&amp;gt;&lt;/span&gt;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;/igDP:FieldSettings&amp;gt;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;/igDP:FieldLayout.FieldSettings&amp;gt;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;igDP:FieldLayout.Settings&amp;gt;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;igDP:FieldLayoutSettings HighlightAlternateRecords="True" /&amp;gt;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;/igDP:FieldLayout.Settings&amp;gt;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;/igDP:FieldLayout&amp;gt;&lt;br&gt;&amp;nbsp; &amp;lt;/igDP:XamDataGrid.FieldLayouts&amp;gt;&lt;br&gt;&lt;br&gt;&amp;nbsp; &amp;lt;igDP:XamDataGrid.FieldSettings&amp;gt;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;igDP:FieldSettings AllowEdit="False" CellClickAction="SelectRecord" /&amp;gt;&lt;br&gt;&amp;nbsp; &amp;lt;/igDP:XamDataGrid.FieldSettings&amp;gt;&lt;br&gt;&lt;br&gt;&amp;lt;/igDP:XamDataGrid&amp;gt;&lt;br&gt;&lt;p&gt;All of the magic here is done via Styles.&amp;nbsp; The control's Resources collection has a
typed Style that targets LabelPresenter.&amp;nbsp;
That Style adds a handler to a LabelPresenter's SizeChanged event.&amp;nbsp; This is how we can detect changes to the
width of Fields at runtime.&amp;nbsp; The other
Style is applied to the child FieldLayout's CellValuePresenterStyle.&amp;nbsp; It ensures that the text in the child record cells
is pushed a little to the left, thus ensuring that it lines up with the text in
the parent row.&lt;/p&gt;

&lt;p&gt;The code-behind is not too complicated.&amp;nbsp; It just handles the SizeChanged event of
every LabelPresenter to verify that the child Fields are the same width as the
parent Fields.&amp;nbsp; It also handles the
FieldLayoutInitialized event of the XamDataGrid so that it can bind the child
Field widths to the parent Field widths.&amp;nbsp;
The demo Window's code is below:&lt;/p&gt;public partial class Window1 : Window&lt;br&gt;{&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; FieldLayout _masterFieldLayout;&lt;br&gt;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; public Window1()&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; InitializeComponent();&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br&gt;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; // Invoked when a field in the datagrid is resized.&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; void OnLabelPresenterSizeChanged(object sender, SizeChangedEventArgs e)&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; var pres = sender as LabelPresenter;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if (pres == null || pres.Field.Owner != _masterFieldLayout)&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; return;&lt;br&gt;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // Ignore tiny changes because they can lead to infinite layout loops.&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; double diff = Math.Abs(pres.Field.Settings.LabelWidth - pres.ActualWidth);&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if (diff &amp;lt;= 1)&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; return;&lt;br&gt;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // Set the LabelWidth property so that the LabelWidthResolved is recalculated.&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // That forces the binding to update the width of the corresponding field in &lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // the detail layout.&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; pres.Field.Settings.LabelWidth = pres.ActualWidth;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br&gt;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; void xamDataGrid_FieldLayoutInitialized(object sender, FieldLayoutInitializedEventArgs e)&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if (_masterFieldLayout == null)&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; _masterFieldLayout = e.FieldLayout;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; else&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // Get all of the visible fields in the master layout.&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; List&amp;lt;Field&amp;gt; masterFields =&lt;br&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; (from f in _masterFieldLayout.Fields&lt;br&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; where f.VisibilityResolved == Visibility.Visible&lt;br&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; select f)&lt;br&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; .ToList();&lt;br&gt;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // Get all of the visible fields in the detail layout.&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; List&amp;lt;Field&amp;gt; detailFields =&lt;br&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; (from f in e.FieldLayout.Fields&lt;br&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; where f.VisibilityResolved == Visibility.Visible&lt;br&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; select f)&lt;br&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; .ToList();&lt;br&gt;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; int iterations = Math.Min(masterFields.Count, detailFields.Count);&lt;br&gt;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // Bind the width of each field in the detail layout to&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // the resolved/actual width of the corresponding field &lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // in the master layout.&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; for (int n = 0; n &amp;lt; iterations; ++n)&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;br&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; BindingOperations.SetBinding(&lt;br&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; detailFields[ n ].Settings,&lt;br&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; FieldSettings.LabelWidthProperty,&lt;br&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; new Binding&lt;br&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;br&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;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Path = new PropertyPath("LabelWidthResolved"),&lt;br&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;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Source = masterFields[ n ]&lt;br&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;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br&gt;}&lt;br&gt;&lt;p&gt;Download the source code &lt;a href="http://users.infragistics.com/joshs/XamDataGridWithSynchronizedFieldWidths.zip"&gt;here&lt;/a&gt;.&amp;nbsp; The solution was built and tested in Visual
Studio 2008, using NetAdvantage for WPF v8.1.&lt;/p&gt;&lt;img src="http://blogs.infragistics.com/aggbug.aspx?PostID=15694" width="1" height="1"&gt;</description></item><item><title>Use ASP.NET MVC ActionFilters to Render AJAX Responses!</title><link>http://blogs.infragistics.com/blogs/jess_chadwick/archive/2008/07/02/use-asp-net-mvc-actionfilters-to-render-ajax-responses.aspx</link><pubDate>Wed, 02 Jul 2008 06:16:59 GMT</pubDate><guid isPermaLink="false">7a8b7c76-b7ad-48e0-9694-5b04ca132ed0:15687</guid><dc:creator>Jess Chadwick</dc:creator><slash:comments>2</slash:comments><description>&lt;p&gt;In my &lt;a href="http://jesschadwick.blogspot.com/2008/06/aspnet-mvc-using-custom-view-engines.html"&gt;previous blog post on ASP.NET MVC&lt;/a&gt;, I walked through an example based on the MVC Preview 2 bits which showed how to make your own custom view engines and ActionFilters.&amp;#160; I also proved (or at least hope I proved) just how powerful these parts of the framework can be, especially when used in conjunction with each other.&amp;#160; The truth is that - while I thought they made great examples on how to extend the base parts of the framework - the whole thing seemed kind of kludgie to me.&amp;#160; What I mean is that it felt kind of awkward having to use the &lt;strong&gt;ActionFilter&lt;/strong&gt; to change which &lt;strong&gt;ViewEngine&lt;/strong&gt; is being used on the fly.&amp;#160; I don't know, maybe I just feel like view engines should be more closely tied to the controller and shouldn't just be chosen willy-nilly like that!&lt;/p&gt;  &lt;p&gt;This was all before the introduction of the &lt;strong&gt;ActionResult&lt;/strong&gt; in MVC Preview 3.&amp;#160; Oh man, was this a great addition!&amp;#160; Expanding the notion of being &amp;quot;loosely coupled&amp;quot;, the controller action's job is no longer to execute logic and chose which view to display-- ok, well, it is...&amp;#160; only now its main responsibility is returning an &lt;strong&gt;ActionResult&lt;/strong&gt;, which is basically a command object that &lt;em&gt;tells the framework what to do&lt;/em&gt; instead the controller taking that action itself.&amp;#160; This not only helps us to decouple the controller (allowing for easier testing, etc.), it also lets us know what the controller wants the framework to do &lt;em&gt;before it happens&lt;/em&gt;.&amp;#160; When you think of it, this is pretty powerful stuff, and gives us access to a whole new part of the process in which can inject additional logic.&amp;#160; And inject it we shall...&lt;/p&gt;  &lt;h4&gt;The SerializableViewDataAttribute Revisited&lt;/h4&gt;  &lt;p&gt;In my previous post, the attribute that I adorned my &lt;strong&gt;Action&lt;/strong&gt;s with was pretty stupid.&amp;#160; It just said, &amp;quot;Is this an AJAX request? If so, set our custom view engine.&amp;quot;&amp;#160; Pretty much all of the meaningful (and interesting) logic happened in our custom view engine.&amp;#160; Now, with the introduction of the &lt;strong&gt;ActionResult&lt;/strong&gt; we no longer have to wait until the view engine phase to get access to (and override) the way our data is returned to the client - we can hijack it in the attribute, and manipulate the Action's result!&amp;#160; Before I confuse you any more, here's the code:&lt;/p&gt; SerializableViewDataAttribute: Preview 3 style    &lt;pre&gt;   public class SerializableViewDataAttribute : ActionFilterAttribute
    {
        public override void OnActionExecuted(ActionExecutedContext filterContext)
        {
            // Get the (lowercase) render mode from the querystring
            var method = filterContext.HttpContext.Request.QueryString[&amp;quot;renderMode&amp;quot;] ?? string.Empty;
            method = method.ToLowerInvariant();

            // Get the view data from the context (using a custom extension method defined elsewhere)
            var viewData = filterContext.GetViewData();
            
            // If this isn't a serializable request or it has no data, just return
            if(string.IsNullOrEmpty(method) || viewData == null) return;

            // Decide which method to use
            switch (method)
            {
                case(&amp;quot;xml&amp;quot;):
                    filterContext.Result = getXmlResult(viewData);
                    break;
                case(&amp;quot;json&amp;quot;):
                    filterContext.Result = getJsonResult(viewData);
                    break;
                case (&amp;quot;partial&amp;quot;):
                    // If this is supposed to be a partial request, just change the view name.
		    // Obviously, this implies that this view exists (in addition to your
		    // original view that the controller was pointing to to begin with.
                    var viewResult = ((ViewResult)filterContext.Result);
                    viewResult.ViewName = &amp;quot;Partial&amp;quot; + viewResult.ViewName;
                    break;
            }
        }

        private static ActionResult getJsonResult(object viewData)
        {
            // Since there's a JsonResult Action, 
            // all we have to do is pass in the data
            return new JsonResult { Data = viewData };
        }

        private static ActionResult getXmlResult(object viewData)
        {
            // There's no &amp;quot;XmlResult&amp;quot; so we have to serialize it ourselves
            var sb = new StringBuilder();
            using (var writer = new StringWriter(sb))
            {
                new XmlSerializer(viewData.GetType()).Serialize(writer, viewData);
            }

            // ...then pass it into a ContentResult
            return new ContentResult { 
                     ContentType = &amp;quot;text/xml&amp;quot;,  // Be sure to set the ContentType!
                     Content = sb.ToString()
                 };
        }

    }&lt;/pre&gt;
 

&lt;p&gt;As you can see, it is a &lt;em&gt;lot&lt;/em&gt; like the logic that was used to create my custom view engine in the last post.&amp;#160; In fact, I essentially copied and pasted it (and added support for partial rendering)!&amp;#160; Also, now that all of this logic lives in the &lt;strong&gt;ActionFilter&lt;/strong&gt; we have no more need for that pesky custom view engine.&amp;#160; So long, cruft!&lt;/p&gt;

&lt;p&gt;For the benefit of those who may not have read the explanation of this logic in my previous blog post, I'll go ahead and repeat (as well as expand on) it here.&amp;#160; This version should actually be a lot easier to understand since the logic is now contained in one place instead of spread out between the &lt;strong&gt;ActionFilter&lt;/strong&gt; and the &lt;strong&gt;ViewEngine&lt;/strong&gt;.&amp;#160; Here's a basic run-down of what's going on:&lt;/p&gt;

&lt;ol&gt;
  &lt;li&gt;The first thing to note is that we're overriding the &lt;em&gt;OnActionExecuted&lt;/em&gt; method of the ActionFilter.&amp;#160; What this implies is that the controller action to which this attribute is applied has already completed, so we now have access to everything it's done: ViewData, TempData, ViewName, etc.&amp;#160; We could also have overridden the &lt;em&gt;OnResultExecuting&lt;/em&gt; method as well; this would be somewhat similar to the difference between the &lt;em&gt;PreRender&lt;/em&gt; and &lt;em&gt;Render&lt;/em&gt; events when using Web Forms. &lt;/li&gt;

  &lt;li&gt;Once the &amp;quot;event&amp;quot; has been triggered, the first thing we want to do is figure out what, exactly, is expected of us - AKA, which serialization mode (if any) we should be using.&amp;#160; In this implementation, I have decided to glean this information from the querystring, but you can just as easily use any other environment variable you'd like (such as the Route Data, cookies... whatever!). &lt;/li&gt;

  &lt;li&gt;Next, I get the ViewData from the context, if any, using the &lt;em&gt;filterContext.GetViewData()&lt;/em&gt; extension method.&amp;#160; Though this method is defined elsewhere and you can't see it in this snippet, it's not really all that interesting - it's just a convenience method that drills down into filterContext.Controller.ViewData (or ViewData.Model, if available) and returns it. &lt;/li&gt;

  &lt;li&gt;Check the render method that we got in Step #2 and if that or the ViewData is invalid, there's nothing for us to do, so we're done and we just return. &lt;/li&gt;

  &lt;li&gt;Assuming we didn't bail out in Step #4, we then go on to overwrite the existing ActionResult (or its properties), depending on what the user has asked for.&amp;#160; This particular version supports: 
    &lt;ol&gt;
      &lt;li&gt;&lt;strong&gt;JSON&lt;/strong&gt;:&amp;#160; Along with the introduction of the &lt;strong&gt;ActionResult&lt;/strong&gt; came the &lt;strong&gt;JsonResult&lt;/strong&gt;, which is a super-cool implementation of ActionResult that serializes whatever data you give to it into JSON to be rendered down to the browser.&amp;#160; As you can see in this example, this makes handling requests for JSON data &lt;em&gt;really&lt;/em&gt; simple and easy. &lt;/li&gt;

      &lt;li&gt;&lt;strong&gt;XML:&lt;/strong&gt;&amp;#160; Though there is no &amp;quot;XmlResult&amp;quot; as there is for JSON, the MVC framework still provides a &lt;strong&gt;ContentResult&lt;/strong&gt; which is a lot like the &lt;strong&gt;JsonResult&lt;/strong&gt; in spirit.&amp;#160; Both of them allow us to send data in some form back to the browser without requiring a View to render it with.&amp;#160; Going back to our example - you can see that it takes a bit of work, but the end result is a raw batch of &lt;em&gt;just&lt;/em&gt; XML sent back to the client for processing. &lt;/li&gt;

      &lt;li&gt;&lt;strong&gt;Partial Rendering&lt;/strong&gt;:&amp;#160; I included this render mode as a bit of a teaser - I should have a follow-up post going in-depth about using partial rendering in ASP.NET MVC.&amp;#160; For now, I'll just say that you can think of it a lot like the ASP.NET AJAX &lt;strong&gt;UpdatePanel&lt;/strong&gt; server control... &lt;/li&gt;
    &lt;/ol&gt;
  &lt;/li&gt;

  &lt;li&gt;That's it!&amp;#160; If we've gotten to this step and not hit any of the three types above, this particular filter will just let the request continue on and have no effects what-so-ever.&amp;#160; That probably means it'll just end up rendering out a fully-rendered page like any other normal (non-AJAX) request.&amp;#160; The important part to note here is that &lt;em&gt;this filter only injects behavior when it is appropriate&lt;/em&gt;.&amp;#160; Otherwise, things proceed as normal and noone even needs to know that these actions are AJAX-ified unless you want them to. &lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;I don't know about you, but the power that this kind of stuff gives us just makes my head spin!&amp;#160; Hopefully you find the above useful; if you do, please feel free to contact me and let me know, especially if you end up using it in one of your apps!&lt;/p&gt;

&lt;blockquote&gt;
  &lt;p&gt;As always, you can check out all of the source code in my repository: &lt;a title="http://code.jesschadwick.com/" href="http://code.jesschadwick.com/"&gt;http://code.jesschadwick.com/&lt;/a&gt;&lt;/p&gt;

  &lt;p&gt;This particular piece of code can most easily be found at &lt;a href="http://code.jesschadwick.com/presentations/ASP.NET%20MVC/AJAX%20Demo/Ajax%20Demo/Filters/SerializableViewDataAttribute.cs"&gt;this direct link&lt;/a&gt;.&lt;/p&gt;&lt;/blockquote&gt;&lt;img src="http://blogs.infragistics.com/aggbug.aspx?PostID=15687" width="1" height="1"&gt;</description><category domain="http://blogs.infragistics.com/blogs/jess_chadwick/archive/tags/ASP.NET+MVC/default.aspx">ASP.NET MVC</category></item><item><title>NetAdvantage for .NET July Hotfix</title><link>http://blogs.infragistics.com/blogs/aogunsola/archive/2008/07/01/netadvantage-for-net-july-hotfix.aspx</link><pubDate>Tue, 01 Jul 2008 14:37:00 GMT</pubDate><guid isPermaLink="false">7a8b7c76-b7ad-48e0-9694-5b04ca132ed0:15683</guid><dc:creator>aogunsola</dc:creator><slash:comments>0</slash:comments><description>&lt;P class=MsoNormal style="MARGIN:0in 0in 0pt;"&gt;&lt;FONT size=3&gt;&lt;FONT face=Calibri&gt;We are actively working on the next .NET hotfix. Our test cycle is currently on schedule and we expect to release this hotfix in the first half of July. I will post more information as we get closer to the ship date.&lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN:0in 0in 0pt;"&gt;&lt;o:p&gt;&lt;FONT face=Calibri size=3&gt;&amp;nbsp;&lt;/FONT&gt;&lt;/o:p&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN:0in 0in 0pt;"&gt;&lt;FONT size=3&gt;&lt;FONT face=Calibri&gt;For those in the US, have a fun July 4&lt;SUP&gt;th&lt;/SUP&gt; holiday!&lt;/FONT&gt;&lt;/FONT&gt;&lt;/P&gt;&lt;img src="http://blogs.infragistics.com/aggbug.aspx?PostID=15683" width="1" height="1"&gt;</description><category domain="http://blogs.infragistics.com/blogs/aogunsola/archive/tags/Hot+Fix/default.aspx">Hot Fix</category><category domain="http://blogs.infragistics.com/blogs/aogunsola/archive/tags/.NET/default.aspx">.NET</category></item><item><title>Introduction to WebDialogWindow - Hello World! Part 1 of 3</title><link>http://blogs.infragistics.com/blogs/tony_lombardo/archive/2008/06/27/introduction-to-webdialogwindow-hello-world-part-1-of-3.aspx</link><pubDate>Fri, 27 Jun 2008 15:55:00 GMT</pubDate><guid isPermaLink="false">7a8b7c76-b7ad-48e0-9694-5b04ca132ed0:15626</guid><dc:creator>Tony Lombardo</dc:creator><slash:comments>0</slash:comments><description>
&lt;p&gt;The WebDialogWindow is a powerful addition to any AJAX developer's toolkit.&amp;nbsp; In this first of a 3 part series, you'll see how to accomplish the equivalent of a "Hello World" application using the WebDialogWindow.&amp;nbsp; Thanks to &lt;a href="http://weblogs.asp.net/craigshoemaker/" target="_blank"&gt;Craig Shoemaker&lt;/a&gt; for putting this series together!&lt;/p&gt;
&lt;div id="media"&gt;
&lt;object id="csSWF" codebase="http://active.macromedia.com/flash7/cabs/ swflash.cab#version=9,0,28,0" classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" height="498" width="640"&gt;
&lt;param name="_cx" value="16933"&gt;
&lt;param name="_cy" value="13176"&gt;
&lt;param name="FlashVars" value=""&gt;
&lt;param name="Movie" value="http://download.infragistics.com/users/craigs/webdialogwindow/helloworld/HelloWorld.swf"&gt;
&lt;param name="Src" value="http://download.infragistics.com/users/craigs/webdialogwindow/helloworld/HelloWorld.swf"&gt;
&lt;param name="WMode" value="Window"&gt;
&lt;param name="Play" value="-1"&gt;
&lt;param name="Loop" value="-1"&gt;
&lt;param name="Quality" value="High"&gt;
&lt;param name="SAlign" value=""&gt;
&lt;param name="Menu" value="-1"&gt;
&lt;param name="Base" value=""&gt;
&lt;param name="AllowScriptAccess" value="always"&gt;
&lt;param name="Scale" value="ShowAll"&gt;
&lt;param name="DeviceFont" value="0"&gt;
&lt;param name="EmbedMovie" value="0"&gt;
&lt;param name="BGColor" value="1A1A1A"&gt;
&lt;param name="SWRemote" value=""&gt;
&lt;param name="MovieData" value=""&gt;
&lt;param name="SeamlessTabbing" value="1"&gt;
&lt;param name="Profile" value="0"&gt;
&lt;param name="ProfileAddress" value=""&gt;
&lt;param name="ProfilePort" value="0"&gt;
&lt;param name="AllowNetworking" value="all"&gt;
&lt;param name="AllowFullScreen" value="true"&gt;
                                                                                
                                
                
&lt;embed src="http://download.infragistics.com/users/craigs/webdialogwindow/helloworld/HelloWorld.swf" name="csSWF" bgcolor="#1a1a1a" quality="best" allowscriptaccess="always" allowfullscreen="true" scale="showall" flashvars="autostart=false" pluginspage="http://www.macromedia.com/shockwave/download/index.cgi?P1_Prod_Version=ShockwaveFlash" height="498" width="640"&gt;
            &lt;/object&gt;
&lt;/div&gt;&lt;img src="http://blogs.infragistics.com/aggbug.aspx?PostID=15626" width="1" height="1"&gt;</description><category domain="http://blogs.infragistics.com/blogs/tony_lombardo/archive/tags/Video+Tutorials/default.aspx">Video Tutorials</category></item><item><title>Aikido June 2008 CTP Released</title><link>http://blogs.infragistics.com/blogs/taz/archive/2008/06/27/aikido-june-2008-ctp-released.aspx</link><pubDate>Fri, 27 Jun 2008 14:31:00 GMT</pubDate><guid isPermaLink="false">7a8b7c76-b7ad-48e0-9694-5b04ca132ed0:15625</guid><dc:creator>Murtaza Abdeali</dc:creator><slash:comments>0</slash:comments><description>&lt;P class=MsoNormal style="MARGIN:0in 0in 10pt;LINE-HEIGHT:normal;mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;"&gt;&lt;SPAN style="FONT-SIZE:12pt;FONT-FAMILY:'Times New Roman','serif';mso-fareast-font-family:'Times New Roman';mso-ansi-language:EN;"&gt;&lt;A href="http://blogs.infragistics.com/blogs/devin_rader/WindowsLiveWriter/AikidoMarch2008CTPReleasedToday_A388/aspNet48_2.png"&gt;&lt;/A&gt;I am pleased to announce the June 2008 CTP of our Aikido framework has been released.&amp;nbsp; This release of the CTP includes a refresh of the WebDataGrid control, and WebDataTree. It also contains our preview of the new Drag and Drop framework. &lt;SPAN style="mso-spacerun:yes;"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN:0in 0in 10pt;LINE-HEIGHT:normal;mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;"&gt;&lt;SPAN style="FONT-SIZE:12pt;FONT-FAMILY:'Times New Roman','serif';mso-fareast-font-family:'Times New Roman';mso-ansi-language:EN;"&gt;You can check out the showcase demonstrating new features &lt;A class="" href="http://labs.infragistics.com/aikido/" target=_blank&gt;&lt;FONT color=#0000ff&gt;here&lt;/FONT&gt;&lt;/A&gt;. &lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN:0in 0in 10pt;LINE-HEIGHT:normal;mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;"&gt;&lt;SPAN style="FONT-SIZE:12pt;FONT-FAMILY:'Times New Roman','serif';mso-fareast-font-family:'Times New Roman';mso-ansi-language:EN;"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&amp;nbsp;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN:0in 0in 10pt;LINE-HEIGHT:normal;mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;mso-outline-level:5;"&gt;&lt;B&gt;&lt;SPAN style="FONT-SIZE:10pt;FONT-FAMILY:'Times New Roman','serif';mso-fareast-font-family:'Times New Roman';mso-no-proof:yes;"&gt;&lt;/SPAN&gt;&lt;/B&gt;&lt;B&gt;&lt;SPAN style="FONT-SIZE:10pt;FONT-FAMILY:'Times New Roman','serif';mso-fareast-font-family:'Times New Roman';mso-ansi-language:EN;"&gt;&lt;FONT size=4&gt;&lt;IMG style="WIDTH:17px;HEIGHT:18px;" height=18 src="http://download.infragistics.com/users/MurtazaA/J8CTP/wdgi.png" width=17&gt;&amp;nbsp;WebDataGrid&lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/B&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN:0in 0in 10pt;LINE-HEIGHT:normal;mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;"&gt;&lt;SPAN style="FONT-SIZE:12pt;FONT-FAMILY:'Times New Roman','serif';mso-fareast-font-family:'Times New Roman';mso-ansi-language:EN;"&gt;The WebDataGrid is a light-weight, high-performing, easy-to-use ASP.NET-based data bound grid control. It is built on the new Infragistics ASP.NET Aikido framework. It features deeply integrated AJAX capabilities, easy to use design-time functionality and broad web standards, compliance and browser compatibility. &lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN:0in 0in 10pt;LINE-HEIGHT:normal;mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;"&gt;&lt;SPAN style="FONT-SIZE:12pt;FONT-FAMILY:'Times New Roman','serif';mso-fareast-font-family:'Times New Roman';mso-ansi-language:EN;"&gt;The June CTP release enhances data editing capabilities using row edit templates, and fixed add new rows.&amp;nbsp;&lt;SPAN style="mso-spacerun:yes;"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE:12pt;FONT-FAMILY:'Times New Roman','serif';mso-fareast-font-family:'Times New Roman';mso-ansi-language:EN;"&gt;&lt;SPAN style="mso-spacerun:yes;"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN:0in 0in 10pt;LINE-HEIGHT:normal;mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;"&gt;&lt;SPAN style="FONT-SIZE:12pt;FONT-FAMILY:'Times New Roman','serif';mso-fareast-font-family:'Times New Roman';mso-ansi-language:EN;"&gt;&lt;SPAN style="mso-spacerun:yes;"&gt;&lt;IMG src="http://download.infragistics.com/users/MurtazaA/J8CTP/GridTemp.png"&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN:0in 0in 10pt;LINE-HEIGHT:normal;mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;"&gt;&lt;SPAN style="FONT-SIZE:12pt;FONT-FAMILY:'Times New Roman','serif';mso-fareast-font-family:'Times New Roman';mso-ansi-language:EN;"&gt;&lt;SPAN style="mso-spacerun:yes;"&gt;&lt;/SPAN&gt;&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN:0in 0in 10pt;LINE-HEIGHT:normal;mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;"&gt;&lt;SPAN style="FONT-SIZE:12pt;FONT-FAMILY:'Times New Roman','serif';mso-fareast-font-family:'Times New Roman';mso-ansi-language:EN;"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN:0in 0in 10pt;LINE-HEIGHT:normal;mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;mso-outline-level:5;"&gt;&lt;B&gt;&lt;SPAN style="FONT-SIZE:10pt;FONT-FAMILY:'Times New Roman','serif';mso-fareast-font-family:'Times New Roman';mso-no-proof:yes;"&gt;&lt;/SPAN&gt;&lt;/B&gt;&lt;B&gt;&lt;SPAN style="FONT-SIZE:10pt;FONT-FAMILY:'Times New Roman','serif';mso-fareast-font-family:'Times New Roman';mso-ansi-language:EN;"&gt;&lt;FONT size=4&gt;&lt;IMG style="WIDTH:17px;HEIGHT:18px;" height=18 src="http://download.infragistics.com/users/MurtazaA/J8CTP/wdti.png" width=17&gt;&amp;nbsp;WebDataTree&lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/B&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN:0in 0in 10pt;LINE-HEIGHT:normal;mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;"&gt;&lt;SPAN style="FONT-SIZE:12pt;FONT-FAMILY:'Times New Roman','serif';mso-fareast-font-family:'Times New Roman';mso-ansi-language:EN;"&gt;The WebDataTree is a light-weight, high performance, easy to use ASP.NET-based tree view control.&amp;nbsp; It is built on the new Infragistics ASP.NET Aikido framework and features deeply integrated AJAX capabilities which allow the developer to create large tree structures with low application overhead.&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;SPAN style="FONT-SIZE:12pt;FONT-FAMILY:'Times New Roman','serif';mso-fareast-font-family:'Times New Roman';mso-ansi-language:EN;"&gt;
&lt;P class=MsoNormal style="MARGIN:0in 0in 10pt;LINE-HEIGHT:normal;mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;"&gt;&lt;SPAN style="FONT-SIZE:12pt;FONT-FAMILY:'Times New Roman','serif';mso-fareast-font-family:'Times New Roman';mso-ansi-language:EN;"&gt;The WebDataTree uses the new Drag and Drop framework and extends client-side drag and drop functionality within a&amp;nbsp; tree or across multiple trees on the page. &lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;/SPAN&gt;
&lt;P class=MsoNormal style="MARGIN:0in 0in 10pt;LINE-HEIGHT:normal;mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;"&gt;&lt;SPAN style="FONT-SIZE:12pt;FONT-FAMILY:'Times New Roman','serif';mso-fareast-font-family:'Times New Roman';mso-ansi-language:EN;"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&amp;nbsp;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN:0in 0in 10pt;LINE-HEIGHT:normal;mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;mso-outline-level:5;"&gt;&lt;B&gt;&lt;SPAN style="FONT-SIZE:10pt;FONT-FAMILY:'Times New Roman','serif';mso-fareast-font-family:'Times New Roman';mso-ansi-language:EN;"&gt;&lt;FONT size=4&gt;&lt;IMG style="WIDTH:18px;HEIGHT:19px;" height=19 src="http://download.infragistics.com/users/MurtazaA/J8CTP/dndi.png" width=18&gt;&amp;nbsp;Drag and Drop Framework&lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/B&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN:0in 0in 10pt;LINE-HEIGHT:normal;mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;"&gt;&lt;SPAN style="FONT-SIZE:12pt;FONT-FAMILY:'Times New Roman','serif';"&gt;New in the June CTP is a generic, cross-browser drag and drop framework. This new framework provides you with a simple to use and completely generic way of adding drag and drop capabilties within your browser.&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN:0in 0in 10pt;LINE-HEIGHT:normal;mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;"&gt;&lt;SPAN style="FONT-SIZE:12pt;FONT-FAMILY:'Times New Roman','serif';"&gt;&lt;IMG style="WIDTH:768px;HEIGHT:506px;" height=506 src="http://download.infragistics.com/users/MurtazaA/J8CTP/dnd.png" width=768&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN:0in 0in 10pt;LINE-HEIGHT:normal;mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;"&gt;&lt;SPAN style="FONT-SIZE:12pt;FONT-FAMILY:'Times New Roman','serif';"&gt;&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN:0in 0in 10pt;LINE-HEIGHT:normal;mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;"&gt;&lt;SPAN style="FONT-SIZE:12pt;FONT-FAMILY:'Times New Roman','serif';mso-fareast-font-family:'Times New Roman';mso-ansi-language:EN;"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN:0in 0in 10pt;LINE-HEIGHT:normal;mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;"&gt;&lt;SPAN style="FONT-SIZE:12pt;FONT-FAMILY:'Times New Roman','serif';mso-fareast-font-family:'Times New Roman';mso-ansi-language:EN;"&gt;The CTP release, compiled against the .NET 2.0 framework, is available for &lt;A class="" href="http://www.infragistics.com/aikido" target=_blank&gt;&lt;FONT color=#0000ff&gt;download from the Infragistics website&lt;/FONT&gt;&lt;/A&gt;.&amp;nbsp; The release does require you to have NetAdvantage for ASP.NET 2008 Volume 2 installed.&amp;nbsp; As always, we encourage you to give us feedback in our &lt;A class="" href="http://forums.infragistics.com/forums/186.aspx" target=_blank&gt;&lt;FONT color=#0000ff&gt;Forums&lt;/FONT&gt;&lt;/A&gt;.&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;img src="http://blogs.infragistics.com/aggbug.aspx?PostID=15625" width="1" height="1"&gt;</description></item><item><title>Data Binding the IsVisible Property of ContextualTabGroup</title><link>http://blogs.infragistics.com/blogs/joshs/archive/2008/06/26/data-binding-the-isvisible-property-of-contextualtabgroup.aspx</link><pubDate>Thu, 26 Jun 2008 20:47:00 GMT</pubDate><guid isPermaLink="false">7a8b7c76-b7ad-48e0-9694-5b04ca132ed0:15618</guid><dc:creator>Joshua Smith</dc:creator><slash:comments>1</slash:comments><description>&lt;p&gt;XamRibbon allows you to have groups of tabs that only display when the application is in a certain state or condition.&amp;nbsp; In other words, it offers context-sensitive tab groups.&amp;nbsp; You can use them by adding ContextualTabGroup objects to the ContextualTabGroups property of XamRibbon.&amp;nbsp; If you want to hide a ContextualTabGroup, you simply set its IsVisible property to false.&lt;/p&gt;&lt;p&gt;What if you want to data bind IsVisible to a property on a ViewModel object?&amp;nbsp; Then the situation becomes a little bit more difficult, because ContextualTabGroup is not a visual element and does not exist in the element tree.&amp;nbsp; A brief glance in &lt;a href="http://moleproject.com" target="_blank"&gt;Mole&lt;/a&gt; can prove that this is the case:&lt;/p&gt;&lt;p&gt;&lt;img src="http://users.infragistics.com/joshs/contextualTabGroup_mole.png"&gt;&lt;br&gt;&lt;/p&gt;&lt;p&gt;Notice how the Visual Tree, on the left, does not contain a ContextualTabGroup instance, but the Visual Tree elements have their DataContext set to an instance of ContextualTabGroup.&amp;nbsp; It turns out that ContextualTabGroup is more like a container for settings, not a full-fledged UI element.&amp;nbsp; One important ramification of this seemingly minor detail is that ContextualTabGroup objects are not in the logical tree, which means they do not have an inheritance context, which means that their properties cannot be data bound like properties of a normal UI element in the element tree.&lt;/p&gt;&lt;p&gt;I recently wrote of a way to work around the fact that some objects declared in XAML do not have an inheritance context, in my “&lt;a href="http://blogs.infragistics.com/blogs/joshs/archive/2008/06/05/binding-a-xamdatagrid-field-property.aspx"&gt;Binding a XamDataGrid Field Property&lt;/a&gt;” post.&amp;nbsp; In this post, I will show another, far more elegant, way to deal with this problem.&amp;nbsp; I am basing my work here on the “&lt;a href="http://blogs.msdn.com/mikehillberg/archive/2008/05/21/Model-see_2C00_-model-do.aspx"&gt;Model-see, Model-do, and the Poo is Optional&lt;/a&gt;” post by Mike Hillberg, of Microsoft.&lt;/p&gt;&lt;p&gt;My objective is simple.&amp;nbsp; I want to have a CheckBox bound to a property on a simple ViewModel class, and the IsVisible property of a ContextualTabGroup bound to that same property.&amp;nbsp; When the CheckBox is checked, the tab group displays.&lt;/p&gt;&lt;p&gt;&lt;img src="http://users.infragistics.com/joshs/demoApp_screenshot.png"&gt;&lt;br&gt;&lt;/p&gt;&lt;p&gt;When the CheckBox is unchecked, the tab group goes away.&lt;/p&gt;&lt;p&gt;&lt;img src="http://users.infragistics.com/joshs/demoAppHiddenGroup_screenshot.png"&gt;&lt;/p&gt;&lt;p&gt;The ViewModel class, an instance of which serves as the Window’s DataContext, looks like this:&lt;/p&gt;&lt;p&gt;class MyViewModel: INotifyPropertyChanged&lt;br&gt;{&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; bool _showContextualTabGroup;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; public bool ShowContextualTabGroup&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; get { return _showContextualTabGroup; }&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; set&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if (value == _showContextualTabGroup)&lt;br&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; return;&lt;br&gt;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; _showContextualTabGroup = value;&lt;br&gt;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; this.OnPropertyChanged("ShowContextualTabGroup");&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br&gt;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; #region INotifyPropertyChanged Members&lt;br&gt;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; public event PropertyChangedEventHandler PropertyChanged;&lt;br&gt;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; void OnPropertyChanged(string propertyName)&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if (this.PropertyChanged != null)&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; this.PropertyChanged(this, new PropertyChangedEventArgs(propertyName));&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br&gt;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; #endregion&lt;br&gt;}&lt;/p&gt;&lt;p&gt;The trick to making this work is in my DataContextSpy class.&amp;nbsp; It provides an artificial inheritance context with which the ContextualTabGroup can gain access to the Window’s ViewModel via one simple data binding expression.&amp;nbsp;&amp;nbsp; Naturally, you can use DataContextSpy for much more than just this one particular task.&amp;nbsp; Here is the class definition:&lt;/p&gt;&lt;p&gt;public class DataContextSpy&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; : Freezable // Enable ElementName and DataContext bindings&lt;br&gt;{&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; public DataContextSpy()&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // This binding allows the spy to inherit a DataContext.&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; BindingOperations.SetBinding(this, DataContextProperty, new Binding());&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br&gt;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; public object DataContext&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; get { return (object)GetValue(DataContextProperty); }&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; set { SetValue(DataContextProperty, value); }&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br&gt;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; // Borrow the DataContext dependency property from FrameworkElement.&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; public static readonly DependencyProperty DataContextProperty =&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; FrameworkElement.DataContextProperty.AddOwner(typeof(DataContextSpy));&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; protected override Freezable CreateInstanceCore()&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // We are required to override this abstract method.&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; throw new NotImplementedException();&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br&gt;}&lt;/p&gt;&lt;p&gt;Now here is the XAML content of the Window, which contains the XamRibbon and DataContextSpy:&lt;/p&gt;&lt;p&gt;&amp;lt;DockPanel&amp;gt;&lt;br&gt;&amp;nbsp; &amp;lt;CheckBox &lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; DockPanel.Dock="Bottom"&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Content="Show ContextualTabGroup" &lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;b&gt;IsChecked="{Binding Path=ShowContextualTabGroup}"&lt;/b&gt;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Margin="10"&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; /&amp;gt;&lt;br&gt;&lt;br&gt;&amp;nbsp; &amp;lt;igRibbon:XamRibbon DockPanel.Dock="Top"&amp;gt;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;igRibbon:XamRibbon.Resources&amp;gt;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;b&gt;&amp;lt;local:DataContextSpy x:Key="spy" /&amp;gt;&lt;/b&gt;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;/igRibbon:XamRibbon.Resources&amp;gt;&lt;br&gt;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;igRibbon:XamRibbon.ContextualTabGroups&amp;gt;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;igRibbon:ContextualTabGroup &lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Caption="I am a ContextualTabGroup" &lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;b&gt;IsVisible="{Binding &lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Source={StaticResource spy}, &lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Path=DataContext.ShowContextualTabGroup}"&lt;/b&gt;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;gt;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;igRibbon:RibbonTabItem &lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Header="I am a RibbonTabItem in the ContextualTabGroup" &lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; /&amp;gt;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;/igRibbon:ContextualTabGroup&amp;gt;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;/igRibbon:XamRibbon.ContextualTabGroups&amp;gt;&lt;br&gt;&amp;nbsp; &amp;lt;/igRibbon:XamRibbon&amp;gt;&amp;nbsp; &amp;nbsp;&lt;br&gt;&amp;nbsp; &lt;br&gt;&amp;lt;/DockPanel&amp;gt;&lt;/p&gt;&lt;p&gt;You can download the source code &lt;a href="http://users.infragistics.com/joshs/DataContextSpyDemo.zip"&gt;here&lt;/a&gt;. Note: this project requires &lt;b&gt;Visual Studio 2008&lt;/b&gt; and &lt;b&gt;NetAdvantage for WPF v7.2&lt;/b&gt; or later to compile.&lt;/p&gt;&lt;img src="http://blogs.infragistics.com/aggbug.aspx?PostID=15618" width="1" height="1"&gt;</description></item><item><title>DevDays 3終了！ </title><link>http://blogs.infragistics.com/blogs/msuzuki/archive/2008/06/25/devdays-3.aspx</link><pubDate>Wed, 25 Jun 2008 08:42:00 GMT</pubDate><guid isPermaLink="false">7a8b7c76-b7ad-48e0-9694-5b04ca132ed0:15592</guid><dc:creator>Makoto Suzuki</dc:creator><slash:comments>0</slash:comments><description>&lt;P&gt;東京・大阪でのインフラジスティックス　DevDays ３が終わりました。皆様にはいろいろなところから参加していただき、心からお礼を申し上げます。セッション後アンケートにおきましても良かった点、改善する点のご指摘、セッションについての感想などをお伝えいただきまして、感謝、感謝&lt;img src="http://blogs.infragistics.com/emoticons/emotion-13.gif" alt="Angel" /&gt;です。&lt;/P&gt;
&lt;P&gt;&amp;nbsp;さて、セッションでお約束しましたデモ用ソースコードをダウンロード用に用意しましたのでお知らせします。セッションでは各トピックについて重要なポイントをご紹介しましたが、実際のコードを検証してみたい方やサンプルを使ってこんなことができるのか実践してみたいなどという方、ぜひ&lt;A class="" title=ASP.NETマッハ開発GoGoGoセッション資料とサンプルコード href="http://users.infragistics.com/MSuzuki/DevDays2008_ASPNET_MSuzuki.zip"&gt;こちらからダウンロード&lt;/A&gt;して参考にしてください。&lt;/P&gt;
&lt;P&gt;ダウンロード後、今後のDevDaysなどの題材、今回取り上げた題材、サンプルおよび資料について皆様からのフィードバックをお寄せいただければ幸いです。今後の参考にさせていただくほかに、質問の多いトピックにつきましては今後本ブログにおきましてもう少し深く掘り下げていくかもしれませんので、よろしくお願いいたします。&lt;/P&gt;&lt;img src="http://blogs.infragistics.com/aggbug.aspx?PostID=15592" width="1" height="1"&gt;</description><category domain="http://blogs.infragistics.com/blogs/msuzuki/archive/tags/Event+Japanese/default.aspx">Event Japanese</category><category domain="http://blogs.infragistics.com/blogs/msuzuki/archive/tags/Japanese/default.aspx">Japanese</category><category domain="http://blogs.infragistics.com/blogs/msuzuki/archive/tags/DevDays+2008/default.aspx">DevDays 2008</category><category domain="http://blogs.infragistics.com/blogs/msuzuki/archive/tags/ASP.NET/default.aspx">ASP.NET</category><category domain="http://blogs.infragistics.com/blogs/msuzuki/archive/tags/_A430F330D530E930B830B930C630A330C330AF30B930_/default.aspx">インフラジスティックス</category></item><item><title>【Dev Days関連】Jason Beresサンプルプログラム</title><link>http://blogs.infragistics.com/blogs/mtsukakoshi/archive/2008/06/25/dev-days-jason-beres.aspx</link><pubDate>Wed, 25 Jun 2008 06:17:00 GMT</pubDate><guid isPermaLink="false">7a8b7c76-b7ad-48e0-9694-5b04ca132ed0:15590</guid><dc:creator>Hiro Tsukakoshi</dc:creator><slash:comments>0</slash:comments><description>&lt;P&gt;皆様こんにちは。&lt;/P&gt;
&lt;P&gt;昨日のブログ上で少しお話させて頂きましたが、先日の第3回Developer DaysにおいてInfragistics本社のJason Beresがセッション「Developing Line of Business Applications with WPF and Silverlight」内で使用したサンプルプログラムをアップいたしました。&lt;/P&gt;
&lt;P&gt;下記のリンクよりダウンロードが可能となっております。ご興味のある方は是非ご利用下さい。&lt;BR&gt;&lt;BR&gt;&lt;A href="http://users.infragistics.com/HiroT/DevDays3%20Jason%20Beres%20sample.zip"&gt;http://users.infragistics.com/HiroT/DevDays3%20Jason%20Beres%20sample.zip&lt;/A&gt;&lt;/P&gt;
&lt;P&gt;こちらは全てのサンプルプログラムが一まとめ(約80MB)になっているため、ダウンロードにかなりお時間が掛かる点をご了承下さい。&lt;/P&gt;
&lt;P&gt;また、下記にそれぞれのサンプルを個別にアップしてありますので、こちらから個別にダウンロードして頂くことも可能です。&lt;BR&gt;最初の2つのリンクを除いてそれぞれ約10MB～20MBあるため、個別の場合でもダウンロードまでに10分以上掛かる場合があります。&lt;BR&gt;ご迷惑をお掛けいたしますがよろしくお願い致します。&lt;BR&gt;&lt;BR&gt;&lt;A href="http://users.infragistics.com/HiroT/3dcloth.zip"&gt;http://users.infragistics.com/HiroT/3dcloth.zip&lt;/A&gt;&lt;/P&gt;
&lt;P&gt;&lt;A href="http://users.infragistics.com/HiroT/3DMovies.zip"&gt;http://users.infragistics.com/HiroT/3DMovies.zip&lt;/A&gt;&lt;/P&gt;
&lt;P&gt;&lt;A href="http://users.infragistics.com/HiroT/DevDaysJapan.zip"&gt;http://users.infragistics.com/HiroT/DevDaysJapan.zip&lt;/A&gt;&lt;/P&gt;
&lt;P&gt;&lt;A href="http://users.infragistics.com/HiroT/FeatureFest.zip"&gt;http://users.infragistics.com/HiroT/FeatureFest.zip&lt;/A&gt;&lt;/P&gt;
&lt;P&gt;&lt;A href="http://users.infragistics.com/HiroT/Healthcare_Prototype.zip"&gt;http://users.infragistics.com/HiroT/Healthcare_Prototype.zip&lt;/A&gt;&lt;/P&gt;
&lt;P&gt;&lt;A href="http://users.infragistics.com/HiroT/Media.zip"&gt;http://users.infragistics.com/HiroT/Media.zip&lt;/A&gt;&lt;/P&gt;
&lt;P&gt;&lt;A href="http://users.infragistics.com/HiroT/WPFMediaPlayer.zip"&gt;http://users.infragistics.com/HiroT/WPFMediaPlayer.zip&lt;/A&gt;&lt;/P&gt;&lt;img src="http://blogs.infragistics.com/aggbug.aspx?PostID=15590" width="1" height="1"&gt;</description><category domain="http://blogs.infragistics.com/blogs/mtsukakoshi/archive/tags/WPF/default.aspx">WPF</category><category domain="http://blogs.infragistics.com/blogs/mtsukakoshi/archive/tags/Silverlight/default.aspx">Silverlight</category></item><item><title>Infragistics NetAdvantage 2008 Volume 2 is here!</title><link>http://blogs.infragistics.com/blogs/tony_lombardo/archive/2008/06/24/infragistics-netadvantage-2008-volume-2-is-here.aspx</link><pubDate>Tue, 24 Jun 2008 15:35:20 GMT</pubDate><guid isPermaLink="false">7a8b7c76-b7ad-48e0-9694-5b04ca132ed0:15575</guid><dc:creator>Tony Lombardo</dc:creator><slash:comments>0</slash:comments><description>&lt;p&gt;I know, I'm a little late on this announcement - but this has been one crazy summer!&amp;nbsp; Ok, we've officially only been in summer for less that a week, but considering the temp was 98 degrees when I got back from TechEd a couple of weeks ago, I say summer has been with us for a while.&amp;nbsp; &lt;/p&gt; &lt;p&gt;Anyway, back to the release.. After another 4 month cycle, there's some really great stuff that has been added to &lt;a href="http://www.infragistics.com/downloads/default.aspx" target="_blank"&gt;NetAdvantage for .NET&lt;/a&gt;.&amp;nbsp; Here's a quick rundown of the new features.&amp;nbsp; &lt;/p&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;h3&gt;Windows Forms&lt;/h3&gt; &lt;h4&gt;WinValidator&lt;/h4&gt; &lt;p&gt;This extender control can be used to perform validations on input fields in your app.&amp;nbsp; Classically seen in ASP.NET applications, validators make it quick and easy to accomplish certain scenarios while improving the overall user experience by providing real-time feedback.&amp;nbsp; &lt;/p&gt; &lt;p&gt;&lt;a href="http://blogs.infragistics.com/blogs/tony_lombardo/WindowsLiveWriter/InfragisticsNetAdvantage2008Volume2isher_A29E/image_2.png"&gt;&lt;img style="border-top-width:0px;border-left-width:0px;border-bottom-width:0px;border-right-width:0px;" height="177" alt="image" src="http://blogs.infragistics.com/blogs/tony_lombardo/WindowsLiveWriter/InfragisticsNetAdvantage2008Volume2isher_A29E/image_thumb.png" width="244" border="0"&gt;&lt;/a&gt; &lt;/p&gt; &lt;p&gt;In the example above (included in the &lt;a href="http://www.infragistics.com/downloads/DownloadLinkGenerator.aspx?DownloadId=00000000-0000-0000-0000-000000001309" target="_blank"&gt;samples SDK&lt;/a&gt;) I've demonstrated using a balloon tip style message to show that this was a required field.&amp;nbsp; &lt;/p&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;h4&gt;Row Edit Template for WinGrid&lt;/h4&gt; &lt;p&gt;Editing tabular data doesn't always have to be reminiscent of your &lt;em&gt;favorite&lt;/em&gt; spreadsheet application.&amp;nbsp;&amp;nbsp; You can use the Row Edit Template to modify the editing experience of a grid row.&amp;nbsp; Because this is a template, you have total control over appearance and functionality.&amp;nbsp; The edit template can be displayed directly beneath a row (as shown in the image below), or it can be 'detached' and positioned exactly where you'd like.&amp;nbsp; The net effect... happy users.&lt;/p&gt; &lt;p&gt;&lt;a href="http://blogs.infragistics.com/blogs/tony_lombardo/WindowsLiveWriter/InfragisticsNetAdvantage2008Volume2isher_A29E/image_4.png"&gt;&lt;img style="border-top-width:0px;border-left-width:0px;border-bottom-width:0px;border-right-width:0px;" height="172" alt="image" src="http://blogs.infragistics.com/blogs/tony_lombardo/WindowsLiveWriter/InfragisticsNetAdvantage2008Volume2isher_A29E/image_thumb_1.png" width="244" border="0"&gt;&lt;/a&gt; &lt;/p&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;h4&gt;Suggest mode Typeahead&lt;/h4&gt; &lt;p&gt;Typeahead has evolved through the years..&amp;nbsp; I'm sure you can remember the days when a dropdown first allowed you to type in a letter and scrolled through the list automatically for you.&amp;nbsp; Next came multi-character typeahead, where words would actually be completed for you.&amp;nbsp; So how do you make that better?&amp;nbsp; Easily - live filter the results based on the characters being typed in.&amp;nbsp; Using the new Suggest AutoComplete mode, you can provide your users with a much improved interface for picking from a list of values.&amp;nbsp; This behavior is commonly seen today with search engines, where they will begin to show you search suggestions as you type.&amp;nbsp; &lt;/p&gt; &lt;p&gt;&lt;a href="http://blogs.infragistics.com/blogs/tony_lombardo/WindowsLiveWriter/InfragisticsNetAdvantage2008Volume2isher_A29E/image_6.png"&gt;&lt;img style="border-top-width:0px;border-left-width:0px;border-bottom-width:0px;border-right-width:0px;" height="78" alt="image" src="http://blogs.infragistics.com/blogs/tony_lombardo/WindowsLiveWriter/InfragisticsNetAdvantage2008Volume2isher_A29E/image_thumb_2.png" width="244" border="0"&gt;&lt;/a&gt; &lt;/p&gt; &lt;p&gt;In the example above, typing "A" into the combobox the user is prompted with the 3 choices displayed in the dropdown.&lt;/p&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;h4&gt;Visual Studio 2008 Docking Indicators&lt;/h4&gt; &lt;p&gt;For those of you who have moved up to VS2008 (and I'd recommend that move to anyone!), you've likely noticed that Microsoft updated the docking indicators once more.&amp;nbsp; But fear not, we've added the 2008 style to our DockManager as seen below.&lt;/p&gt; &lt;p&gt;&lt;a href="http://blogs.infragistics.com/blogs/tony_lombardo/WindowsLiveWriter/InfragisticsNetAdvantage2008Volume2isher_A29E/image_8.png"&gt;&lt;img style="border-top-width:0px;border-left-width:0px;border-bottom-width:0px;border-right-width:0px;" height="160" alt="image" src="http://blogs.infragistics.com/blogs/tony_lombardo/WindowsLiveWriter/InfragisticsNetAdvantage2008Volume2isher_A29E/image_thumb_3.png" width="244" border="0"&gt;&lt;/a&gt; &lt;/p&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;h3&gt;ASP.NET&lt;/h3&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;h4&gt;TreeMap &lt;/h4&gt; &lt;p&gt;Ever need to show hierarchical data in a visual way?&amp;nbsp; That's the sole purpose of the TreeMap.&amp;nbsp; If you're not familiar with TreeMap, you can get a great explanation and some common examples from &lt;a href="http://en.wikipedia.org/wiki/Treemap" target="_blank"&gt;Wikipedia&lt;/a&gt;.&amp;nbsp; An example of a TreeMap is shown below.&amp;nbsp; BTW, this new visualization type has been added to the UltraChart (win and web).&lt;/p&gt; &lt;p&gt;&lt;a href="http://blogs.infragistics.com/blogs/tony_lombardo/WindowsLiveWriter/InfragisticsNetAdvantage2008Volume2isher_A29E/image_10.png"&gt;&lt;img style="border-top-width:0px;border-left-width:0px;border-bottom-width:0px;border-right-width:0px;" height="107" alt="image" src="http://blogs.infragistics.com/blogs/tony_lombardo/WindowsLiveWriter/InfragisticsNetAdvantage2008Volume2isher_A29E/image_thumb_4.png" width="244" border="0"&gt;&lt;/a&gt; &lt;/p&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;h4&gt;WebSlider&lt;/h4&gt; &lt;p&gt;I personally, am tired of textboxes.&amp;nbsp; It seems that every time an application wants me to enter data, I have to use a plain old standard textbox.&amp;nbsp; Enter the WebSlider.&amp;nbsp; You can use the WebSlider to enter a single value, or a 2 value range.&amp;nbsp; And the user never has to type in a single character.&amp;nbsp; The 'data entry' is done entirely through the needle movment, which just feels better.&amp;nbsp; This is perfect for touch screen devices, where pointing and clicking is much more natural than typing.&lt;/p&gt; &lt;p&gt;&lt;a href="http://blogs.infragistics.com/blogs/tony_lombardo/WindowsLiveWriter/InfragisticsNetAdvantage2008Volume2isher_A29E/image_12.png"&gt;&lt;img style="border-top-width:0px;border-left-width:0px;border-bottom-width:0px;border-right-width:0px;" height="104" alt="image" src="http://blogs.infragistics.com/blogs/tony_lombardo/WindowsLiveWriter/InfragisticsNetAdvantage2008Volume2isher_A29E/image_thumb_5.png" width="244" border="0"&gt;&lt;/a&gt; &lt;/p&gt; &lt;p&gt;The example above, taken from the new &lt;a href="http://samples.infragistics.com/2008.2/webshowcase/infrarealty/default.aspx" target="_blank"&gt;InfraRealty showcase sample&lt;/a&gt; uses the WebSlider to set a min/max value as a range for search criteria.&amp;nbsp; Personally, after seeing how natural this implementation felt, I wish that all of the RealEstate sites out there would update their UI's!&lt;/p&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;h4&gt;WebHierarchicalDataSource&lt;/h4&gt; &lt;p&gt;At the risk of sounding like a car salesman, I'm going to give you my honest opinion on this control - it's the bomb.&amp;nbsp; Not only can you set up hierarchical relationships at design-time, it does the CRUD for you as well!&amp;nbsp; No more worrying about how to update your hierarchical data when bound to the webgrid, just use the WebHierarchicalDataSource (WDHS from here on).&amp;nbsp; How about self related hierarchies?&amp;nbsp; This is a pain point for some of you I know, as you've been asking for this type of support for the grid for as long as I can remember.&amp;nbsp; The WHDS is here to relieve your pain.&amp;nbsp; You can set up your self related hierarchy in the WHDS, and then bind it to the WebGrid.&amp;nbsp; The WHDS is built on top of Microsof'ts datasource control framework - so the WHDS can be used to bind to anything that can consume hierarchical data (ie. trees and menus).&amp;nbsp; &lt;/p&gt; &lt;p&gt;&lt;a href="http://blogs.infragistics.com/blogs/tony_lombardo/WindowsLiveWriter/InfragisticsNetAdvantage2008Volume2isher_A29E/image_14.png"&gt;&lt;img style="border-top-width:0px;border-left-width:0px;border-bottom-width:0px;border-right-width:0px;" height="168" alt="image" src="http://blogs.infragistics.com/blogs/tony_lombardo/WindowsLiveWriter/InfragisticsNetAdvantage2008Volume2isher_A29E/image_thumb_6.png" width="244" border="0"&gt;&lt;/a&gt; &lt;/p&gt; &lt;p&gt;Above, the WHDS designer is being used to create a 2 level hierarchy, taking info from two separate DataSources.&amp;nbsp; Note that you can take data for any level, from any datasource.&amp;nbsp; So if you wanted to map your LINQDataSource data to parent data coming from your SQLDataSource - it's a simple task.&lt;/p&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;You can download NetAdvantage for .NET 2008 Volume 2 (in various packages) from the &lt;a href="http://www.infragistics.com/downloads/default.aspx" target="_blank"&gt;download page&lt;/a&gt;, and begin using these new features today.&amp;nbsp; &lt;/p&gt;&lt;img src="http://blogs.infragistics.com/aggbug.aspx?PostID=15575" width="1" height="1"&gt;</description><category domain="http://blogs.infragistics.com/blogs/tony_lombardo/archive/tags/Announcements/default.aspx">Announcements</category><category domain="http://blogs.infragistics.com/blogs/tony_lombardo/archive/tags/.NET/default.aspx">.NET</category></item><item><title>第3回Dev Daysにお越し頂きまして誠にありがとうございました</title><link>http://blogs.infragistics.com/blogs/mtsukakoshi/archive/2008/06/24/3-dev-days.aspx</link><pubDate>Tue, 24 Jun 2008 10:24:00 GMT</pubDate><guid isPermaLink="false">7a8b7c76-b7ad-48e0-9694-5b04ca132ed0:15570</guid><dc:creator>Hiro Tsukakoshi</dc:creator><slash:comments>0</slash:comments><description>&lt;P&gt;皆様、こんにちは。&lt;/P&gt;
&lt;P&gt;先週17日(火)と19日（木）にそれぞれ東京・大阪にて第3回Developer Daysを開催し、多くのお客様にご来場頂きました。&lt;BR&gt;参加をされた方、また登録はされたけれど残念ながらご都合がつかなかった方も含めまして誠にありがとうございました。&lt;/P&gt;
&lt;P&gt;まずはこの場をお借りしまして、インフラジスティックス社員一同から感謝の気持ちをお伝えしたいと思います。&lt;/P&gt;
&lt;P&gt;また、会場で撮った写真の一部を載せておきます。&lt;/P&gt;
&lt;P&gt;まずは東京会場から&lt;BR&gt;&lt;IMG style="WIDTH:307px;HEIGHT:231px;" height=194 src="http://users.infragistics.com/HiroT/068.JPG" width=259 align=middle&gt;　&amp;nbsp; 　&lt;IMG style="WIDTH:297px;HEIGHT:230px;" height=194 src="http://users.infragistics.com/HiroT/079.JPG" width=259 align=top&gt;&lt;BR&gt;「NetAdvantageによる簡単＆拡張性の高い業務アプリ開発」　&amp;nbsp; 「NetAdvantage for ASP.NETでマッハ開発GoGoGo!」&lt;/P&gt;
&lt;P&gt;&lt;IMG style="WIDTH:325px;HEIGHT:234px;" height=194 src="http://users.infragistics.com/HiroT/110.JPG" width=259 align=top&gt;&lt;BR&gt;ちゃっかり自著を宣伝するJason&lt;/P&gt;
&lt;P&gt;そしてこちらが大阪会場&lt;BR&gt;&lt;IMG style="WIDTH:314px;HEIGHT:240px;" height=194 src="http://users.infragistics.com/HiroT/016.JPG" width=259 align=top&gt;　　　&lt;IMG style="WIDTH:315px;HEIGHT:241px;" height=194 src="http://users.infragistics.com/HiroT/027.JPG" width=259 align=top&gt;&lt;BR&gt;&lt;BR&gt;東京会場が空調の関係でかなり蒸し暑くなってしまい、大変申し訳ありませんでした。&lt;BR&gt;実は大阪はこれとは逆に寒すぎたようです。色々とご迷惑をお掛けしました、、、。&lt;/P&gt;
&lt;P&gt;皆様、繰り返しとなりますが、ご来場頂きまして誠にありがとうございました。また、ご記入頂きましたアンケートも次回以降のDevDaysに活かしていきたいと考えております。今回ご来場できなかった方々も今後のDevDaysで是非お会いしましょう。&amp;nbsp;&lt;/P&gt;
&lt;P&gt;それでは、明日に私のブログ上の記事でJason Beresがセッション中に使用したサンプルプログラムをアップいたしますのでご興味のある方はダウンロードしてみて下さい。&lt;/P&gt;&lt;img src="http://blogs.infragistics.com/aggbug.aspx?PostID=15570" width="1" height="1"&gt;</description><category domain="http://blogs.infragistics.com/blogs/mtsukakoshi/archive/tags/ASP.NET/default.aspx">ASP.NET</category><category domain="http://blogs.infragistics.com/blogs/mtsukakoshi/archive/tags/WPF/default.aspx">WPF</category><category domain="http://blogs.infragistics.com/blogs/mtsukakoshi/archive/tags/Silverlight/default.aspx">Silverlight</category><category domain="http://blogs.infragistics.com/blogs/mtsukakoshi/archive/tags/WindowsForms/default.aspx">WindowsForms</category></item><item><title>Quick Tip - Migrating TagPrefixes to Web.config</title><link>http://blogs.infragistics.com/blogs/tony_lombardo/archive/2008/06/23/quick-tip-migrating-tagprefixes-to-web-config.aspx</link><pubDate>Mon, 23 Jun 2008 20:30:19 GMT</pubDate><guid isPermaLink="false">7a8b7c76-b7ad-48e0-9694-5b04ca132ed0:15563</guid><dc:creator>Tony Lombardo</dc:creator><slash:comments>2</slash:comments><description>&lt;p&gt;I've written about moving the &amp;lt;%@ Register TagPrefix ... %&amp;gt; directives out of your ASPX pages, and into your web.config.&amp;nbsp; But one thing I never talked about was - how to do that step.&amp;nbsp; I always did it manually, but about a year ago, I remember talking with one of the developers on the Project Upgrade Utility.. Well, that discussion to my surprise spawned off a lovely feature..&amp;nbsp; So here's the simple 2 step process&lt;/p&gt; &lt;p&gt;1) Launch the Infragistics Project Upgrade utility&lt;/p&gt; &lt;p&gt;&lt;a href="http://blogs.infragistics.com/blogs/tony_lombardo/WindowsLiveWriter/QuickTipMigratingTagPrefixestoWeb.config_E815/image_2.png"&gt;&lt;img style="border-right:0px;border-top:0px;border-left:0px;border-bottom:0px;" height="244" alt="image" src="http://blogs.infragistics.com/blogs/tony_lombardo/WindowsLiveWriter/QuickTipMigratingTagPrefixestoWeb.config_E815/image_thumb.png" width="196" border="0"&gt;&lt;/a&gt; &lt;/p&gt; &lt;p&gt;2) Open the options dialog by click on the File menu, and selecting the Settings menu item.&amp;nbsp; In the options dialog, check off "Add register tags to web.config" (optionally, choose "Add&amp;nbsp; all assemblies to web.config" which will add assembly references as well).&lt;/p&gt; &lt;p&gt;&lt;a href="http://blogs.infragistics.com/blogs/tony_lombardo/WindowsLiveWriter/QuickTipMigratingTagPrefixestoWeb.config_E815/image_4.png"&gt;&lt;img style="border-right:0px;border-top:0px;border-left:0px;border-bottom:0px;" height="92" alt="image" src="http://blogs.infragistics.com/blogs/tony_lombardo/WindowsLiveWriter/QuickTipMigratingTagPrefixestoWeb.config_E815/image_thumb_1.png" width="244" border="0"&gt;&lt;/a&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;After saving your settings, the next time you run the Infragistics Project Upgrade utility, it will remove all Infragistics &amp;lt;%@ Register .. %&amp;gt; directives from your ASPX pages, and replace them with the appropriate TagPrefix nodes in your web.config.&amp;nbsp; Using the settings above, the upgrade utility will also add all Infragistics assembly references to your web.config.&amp;nbsp; &lt;/p&gt;&lt;img src="http://blogs.infragistics.com/aggbug.aspx?PostID=15563" width="1" height="1"&gt;</description><category domain="http://blogs.infragistics.com/blogs/tony_lombardo/archive/tags/Tips+and+Tricks/default.aspx">Tips and Tricks</category><category domain="http://blogs.infragistics.com/blogs/tony_lombardo/archive/tags/asp.net/default.aspx">asp.net</category></item><item><title>開発サポート部門からのお知らせ </title><link>http://blogs.infragistics.com/blogs/jpdevsupport/archive/2008/06/23/15415.aspx</link><pubDate>Mon, 23 Jun 2008 00:30:00 GMT</pubDate><guid isPermaLink="false">7a8b7c76-b7ad-48e0-9694-5b04ca132ed0:15415</guid><dc:creator>Makoto Suzuki</dc:creator><slash:comments>0</slash:comments><description>平素は弊社製品をお使いいただきましてありがとうございます。 開発サポート部門より弊社ユーザ様へのお願いがございます。 現在弊社Webページより技術的なご質問を承っておりますが、 "サポート要求を送信"画面におきまして 「製品ラインアップ」 を選択して頂いております。 こちらにてご質問対象の弊社製品を選んでいただく事となりますが、 この際、誤った製品を選択された場合は弊社システムにて優先順位が 一番下 のご質問として認識される事となります。 例1: NetAdvantage for .NET (JP) 2007 Volume2 に対するプライオリティサポート契約有りの場合 ケース1: NetAdvantage for .NET (JP) 2007 Volume2 を選択 &amp;gt;&amp;gt; プライオリティユーザ様からのご質問として認識致します。 ケース2: NetAdvantage for .NET (JP) 2007 Volume1 を選択 &amp;gt;&amp;gt; トライアルバージョンとしてのご質問として認識致します。 例2: NetAdvantage for .NET (JP) 2007 Volume2...(&lt;a href="http://blogs.infragistics.com/blogs/jpdevsupport/archive/2008/06/23/15415.aspx"&gt;read more&lt;/a&gt;)&lt;img src="http://blogs.infragistics.com/aggbug.aspx?PostID=15415" width="1" height="1"&gt;</description><category domain="http://blogs.infragistics.com/blogs/jpdevsupport/archive/tags/Developer+Support+Japan/default.aspx">Developer Support Japan</category><category domain="http://blogs.infragistics.com/blogs/jpdevsupport/archive/tags/_A430F330D530E930B830B930C630A330C330AF30B930_/default.aspx">インフラジスティックス</category></item><item><title>Persisting XamDataGrid Field Widths between Runs of an Application</title><link>http://blogs.infragistics.com/blogs/joshs/archive/2008/06/20/persisting-xamdatagrid-field-widths-between-runs-of-an-application.aspx</link><pubDate>Fri, 20 Jun 2008 13:47:00 GMT</pubDate><guid isPermaLink="false">7a8b7c76-b7ad-48e0-9694-5b04ca132ed0:15530</guid><dc:creator>Joshua Smith</dc:creator><slash:comments>1</slash:comments><description>XamDataGrid has many great features, but as of NetAdvantage
for WPF v7.2, it does not yet provide a generic way to save and load user settings.&amp;nbsp; A common requirement for a grid-centric application
is that the columns/fields in the grid retain their widths from one run of the application
to the next.&amp;nbsp; I have created a stopgap
solution, in the form of a utility class, that we can use until XamDataGrid has
native support for this functionality.

&lt;p&gt;I created a class called XamDataGridFieldWidthManager that
you can use to handle the saving, loading, and applying of field widths.&amp;nbsp; It will take a XamDataGrid like this...&lt;/p&gt;
&lt;p&gt;&lt;img src="http://users.infragistics.com/joshs/persistedFieldWidths_screenshot.png"&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;...and, upon calling its SaveFieldWidths method, it will generate
the following XML...&lt;/p&gt;
&amp;lt;?xml version="1.0" encoding="utf-8"?&amp;gt;&lt;br&gt;&amp;lt;field-layouts&amp;gt;&lt;br&gt;&amp;nbsp; &amp;lt;field-layout id="master"&amp;gt;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;field name="ID" width="52" /&amp;gt;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;field name="Column 1" width="77" /&amp;gt;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;field name="Column 2" width="71" /&amp;gt;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;field name="Column 3" width="148" /&amp;gt;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;field name="Column 4" width="168" /&amp;gt;&lt;br&gt;&amp;nbsp; &amp;lt;/field-layout&amp;gt;&lt;br&gt;&amp;nbsp; &amp;lt;field-layout id="detail"&amp;gt;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;field name="ParentID" width="258" /&amp;gt;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;field name="Whatever" width="190" /&amp;gt;&lt;br&gt;&amp;nbsp; &amp;lt;/field-layout&amp;gt;&lt;br&gt;&amp;lt;/field-layouts&amp;gt;&lt;br&gt;
&lt;p&gt;You can save that XML somewhere, and next time that you
display that XamDataGrid in your program, you pass the XML back to XamDataGridFieldWidthManager
so that those persisted field widths are applied to the new fields. &lt;/p&gt;

&lt;p&gt;Here is how the demo program uses XamDataGridFieldWidthManager:&lt;/p&gt;
public partial class Window1 : Window&lt;br&gt;{&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; const string SETTINGS_FILE = "field-widths.xml";&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; readonly XamDataGridFieldWidthManager _widthManager;&lt;br&gt;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; public Window1()&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; this.InitializeComponent();&lt;br&gt;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; _widthManager = this.CreateWidthManager();&lt;br&gt;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // NOTE: You *must* attach a handler to the RequestFieldLayoutID event.&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; _widthManager.RequestFieldLayoutID += this.OnWidthManagerRequestFieldLayoutID;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br&gt;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; XamDataGridFieldWidthManager CreateWidthManager()&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; StreamReader streamReader = null;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; try&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; XmlReader xmlReader = null;&lt;br&gt;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if (File.Exists(SETTINGS_FILE))&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;br&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; streamReader = new StreamReader(SETTINGS_FILE);&lt;br&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; xmlReader = XmlReader.Create(streamReader);&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br&gt;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; return new XamDataGridFieldWidthManager(this.xamDataGrid, xmlReader);&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; finally&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if (streamReader != null)&lt;br&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; streamReader.Dispose();&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br&gt;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; void OnWidthManagerRequestFieldLayoutID(object sender, RequestFieldLayoutIDEventArgs e)&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // Provide a unique identifier for each of the FieldLayouts in the XamDataGrid.&lt;br&gt;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if (e.FieldLayout.Key == this.xamDataGrid.DataSource)&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; e.UniqueID = "master";&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; else&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; e.UniqueID = "detail";&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br&gt;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; protected override void OnClosing(CancelEventArgs e)&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; base.OnClosing(e);&lt;br&gt;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if (!e.Cancel)&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // Save the field widths to disk.&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; var settings = new XmlWriterSettings { Indent = true };&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; using (var xmlWriter = XmlWriter.Create(SETTINGS_FILE, settings))&lt;br&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; _widthManager.SaveFieldWidths(xmlWriter);&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br&gt;}&lt;br&gt;
&lt;p&gt;It is important to note that you must hook the
RequestFieldLayoutID event and, in that event handling method, supply a unique
identifier for each FieldLayout in the XamDataGrid.&amp;nbsp; This is necessary because XamDataGridFieldWidthManager
must be able to map a &amp;lt;field-layout&amp;gt; XML element to a FieldLayout object,
but it has no way to produce the same unique identifier for the same &lt;i&gt;logical&lt;/i&gt; FieldLayout &amp;nbsp;across runs of the application.&amp;nbsp; Since I have no way to do that in a generic
fashion, I consult the class's consumer for that information.&lt;/p&gt;

Download the source code
and demo project &lt;a href="http://users.infragistics.com/joshs/XamDataGridPersistedFieldWidths.zip"&gt;here&lt;/a&gt;.&amp;nbsp; You must have Visual Studio 2008 and
NetAdvantage for WPF v7.2 or later installed.
&lt;img src="http://blogs.infragistics.com/aggbug.aspx?PostID=15530" width="1" height="1"&gt;</description></item><item><title>DevDays3 東京・大阪</title><link>http://blogs.infragistics.com/blogs/tyamada/archive/2008/06/20/devdays3.aspx</link><pubDate>Fri, 20 Jun 2008 07:03:00 GMT</pubDate><guid isPermaLink="false">7a8b7c76-b7ad-48e0-9694-5b04ca132ed0:15525</guid><dc:creator>Tatsuya Yamada</dc:creator><slash:comments>0</slash:comments><description>&lt;p&gt;東京と大阪会場、ともに多数のお客様のご来場をいただき、ありがとうございました！&lt;br&gt;&lt;br&gt;東京ではセッション途中でPCを交換するハプニングがあったりと&lt;img src="http://blogs.infragistics.com/emoticons/emotion-10.gif" alt="Embarrassed" /&gt;、お見苦しい点もありましたが、皆様からの暖かいフィードバックを糧に、今後よりよいセッションやデモをご提供していきたいと思います。&lt;br&gt;&lt;br&gt;今回は「NetAdvantageによる簡単＆拡張性の高い業務アプリ開発」というテーマでWindows Formsを題材としたお話をさせていただきました。&lt;br&gt;&lt;br&gt;前半はデザイナやウィザードを活用した最小コードでの業務アプリ開発デモと、AppStylistによるスタイリングのご紹介でした。とくにAppStylistは皆様により積極的に使っていただきたい機能です。AppStylistの使い方に関する記事は&lt;a href="http://codezine.jp/a/article/aid/2489.aspx" title="CodeZine上でも連載中"&gt;CodeZine上でも連載中&lt;/a&gt;ですので、こちらもぜひご覧ください。&lt;br&gt;&lt;br&gt;後半では、プレゼンテーションフレームワーク(PLF)を活用したNetAdvantageの拡張性の一端のご紹介でした。作成フィルタを使ってグリッドに機能を追加するデモを見ていただきました。PLFの活用はNetAdvantageの大きなセールスポイントですが、なかなか皆様にご紹介しきれていないと感じている点でもあります。今後コミュニティサイトなどを通して、いろいろな事例をご紹介していきたいと思っています。&lt;/p&gt;&lt;p&gt;今回は後半のデモ中に使用したコードを添付しますので、興味がある方はダウンロードしてください。これはグリッドのグループ化領域に、全展開と全縮小機能のボタンを追加する簡単なフィルタのサンプルコードになります。&lt;/p&gt;&lt;p&gt;プレゼン資料その他については、また後日公開します。 &lt;br&gt;&lt;/p&gt;&lt;p&gt;それではまた。&amp;nbsp;&lt;/p&gt;&lt;p&gt;&lt;br&gt;&lt;/p&gt;&lt;img src="http://blogs.infragistics.com/aggbug.aspx?PostID=15525" width="1" height="1"&gt;</description><enclosure url="http://blogs.infragistics.com/blogs/tyamada/attachment/15525.ashx" length="1407" type="application/zip" /><category domain="http://blogs.infragistics.com/blogs/tyamada/archive/tags/Event/default.aspx">Event</category><category domain="http://blogs.infragistics.com/blogs/tyamada/archive/tags/_A430F330D530E930B830B930C630A330C330AF30B930_/default.aspx">インフラジスティックス</category><category domain="http://blogs.infragistics.com/blogs/tyamada/archive/tags/DevDays3/default.aspx">DevDays3</category></item><item><title>A sad day for my laptop bag</title><link>http://blogs.infragistics.com/blogs/tony_lombardo/archive/2008/06/19/a-sad-day-for-my-laptop-bag.aspx</link><pubDate>Thu, 19 Jun 2008 15:40:13 GMT</pubDate><guid isPermaLink="false">7a8b7c76-b7ad-48e0-9694-5b04ca132ed0:15520</guid><dc:creator>Tony Lombardo</dc:creator><slash:comments>1</slash:comments><description>&lt;a href="http://blogs.infragistics.com/blogs/tony_lombardo/WindowsLiveWriter/Asaddayformylaptopbag_A3F8/image_2.png"&gt;&lt;img style="border-top-width:0px;border-left-width:0px;border-bottom-width:0px;border-right-width:0px;" height="155" alt="image" src="http://blogs.infragistics.com/blogs/tony_lombardo/WindowsLiveWriter/Asaddayformylaptopbag_A3F8/image_thumb.png" width="166" align="right" border="0"&gt;&lt;/a&gt;  &lt;p&gt;Well, it finally happened.. my PDC 2005 laptop bag started to tear apart at the seams.&amp;nbsp; It took me about a week to finally choose its replacement.&amp;nbsp; I had was looking for three things.&amp;nbsp; It had to look good for one.&amp;nbsp; For the amount of time I carry my laptop around with me, it's almost like a fashion accessory.&amp;nbsp; My second requirement was that it was small.&amp;nbsp; With the amount of traveling I do, the last thing I want is a big clunky bag.&amp;nbsp; My final requirement was that it looked professional enough for me to comfortably take it into business meetings without being embarrassed.&amp;nbsp; I finally decided on the Case Logic bag.&lt;/p&gt; &lt;p&gt;When the bag arrived my first impression was that it was bigger than I thought it would be.&amp;nbsp; But the canvas fabric was an improvement over my last bag.&amp;nbsp; The bag itself doesn't have much structure, so with out any contents in it, it shrinks down nicely.&amp;nbsp; When it came time to move the contents of my old bag to the new one, I was happy to see that there was plenty of room.&amp;nbsp; My only complaint is that there's no good single pocket organizer like there was in my PDC bag.&amp;nbsp; There are a few different pockets, but they're just large pockets with no separators/organizers in them.&amp;nbsp; I was still able to organize my things to some degree, so it wasn't a total loss.&amp;nbsp; The strap feels a lot more sturdy than the PDC 2005 bag did.&amp;nbsp; Its a wider strap, so it doesn't have the tendency to cut into your shoulder.&amp;nbsp; &lt;/p&gt; &lt;p&gt;The bag is a little more faded than it looks in the picture, and the graphics aren't as crisp.&amp;nbsp; I'm glad the graphics aren't as crisp, because I was worried they were a bit too 'busy'.&amp;nbsp; I tend dislike the whole idea of "street art" on mainstream items anyway.&amp;nbsp; It's like putting flame stickers on your car's hood.&amp;nbsp; If you got a good flame job from a quality paint shop, it just feels different than the stick on one sold at the local auto parts store.&amp;nbsp; Anyway, back to the laptop bag.. All in all I give it a 7 out of 10. It's close to what I wanted, but not exactly.&amp;nbsp; But for $30, I can't complain at all.&lt;/p&gt;&lt;img src="http://blogs.infragistics.com/aggbug.aspx?PostID=15520" width="1" height="1"&gt;</description></item></channel></rss>