<rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" xmlns:copyright="http://blogs.law.harvard.edu/tech/rss" xmlns:image="http://purl.org/rss/1.0/modules/image/">
    <channel>
        <title>NExT Life</title>
        <link>http://blogs.ugidotnet.org/NExTLife/Default.aspx</link>
        <description>Il blog di Matteo Fontana</description>
        <language>it-IT</language>
        <copyright>Foffo</copyright>
        <generator>Subtext Version 2.6.0.0</generator>
        <image>
            <title>NExT Life</title>
            <url>http://blogs.ugidotnet.org/images/RSS2Image.gif</url>
            <link>http://blogs.ugidotnet.org/NExTLife/Default.aspx</link>
            <width>77</width>
            <height>60</height>
        </image>
        <item>
            <title>DotDotNet: Evento Accesso ai dati</title>
            <category>Varie</category>
            <link>http://blogs.ugidotnet.org/NExTLife/archive/2009/03/16/dotdotnet-evento-accesso-ai-dati.aspx</link>
            <description>&lt;p&gt;Ho partecipato al primo evento organizzato da &lt;a href="http://www.dotdotnet.org/Home.aspx" target="_blank"&gt;DotDotNet&lt;/a&gt; in cui si parlava di accesso ai dati.&lt;/p&gt;  &lt;p&gt;Com'è andata? Direi molto bene per essere il primo evento! Sono intervenuti nell'ordine &lt;a href="http://blogs.ugidotnet.org/Alby/" target="_blank"&gt;Alberto Dallagiacoma&lt;/a&gt; a parlarci di NHibernate, &lt;a href="http://blogs.ugidotnet.org/allePalle_blog/Default.aspx" target="_blank"&gt;Alessandro Scardova&lt;/a&gt; a parlarci del passaggio dai DataSet ad Entity Framework e &lt;a href="http://www.geniodelmale.info/" target="_blank"&gt;Lorenzo Barbieri&lt;/a&gt; che ci ha illustrato i pregi e le funzionalità di Visual Studio DB Edition.&lt;/p&gt;  &lt;p&gt;Gli speaker se la sono cavata egregiamente, tenendo conto che era il loro primo evento (beh Lorenzo a parte): possono sicuramente migliorare, ma hanno fatto molto meglio di quello che avrei potuto fare io :) :)&lt;/p&gt;  &lt;p&gt;Il taglio delle sessioni a me è piaciuto: sessioni corte che introducono un argomento solo senza troppe pretese. Secondo me servono sessioni del genere per indirizzare le persone e renderle consapevoli di quello che offre la piazza.&lt;/p&gt;  &lt;p&gt;La prossima volta cercherò di unirmi alla cena, così scambieremo due chiacchiere anche faccia a faccia.&lt;/p&gt;  &lt;p&gt; &lt;/p&gt;  &lt;p&gt;In attesa del form on-line di adesione al gruppo, Compliementi ragazzi e Buon Lavoro.&lt;/p&gt;  &lt;p&gt; &lt;/p&gt;  &lt;p&gt;P.S.&lt;/p&gt;  &lt;p&gt;Fantastica l'idea di accogliere la gente coi ciccioli. Mi raccomando fatelo ancora perchè io stavolta non li ho mangiati :(&lt;/p&gt;  &lt;p&gt; &lt;/p&gt;  &lt;p&gt;Matteo&lt;/p&gt;  &lt;p&gt; &lt;/p&gt;  &lt;div class="wlWriterSmartContent" id="scid:0767317B-992E-4b12-91E0-4F059A8CECA8:f5e229c2-4bdc-4652-b906-eda2f22a646a" style="padding-right: 0px; display: inline; padding-left: 0px; padding-bottom: 0px; margin: 0px; padding-top: 0px"&gt;Technorati Tag: &lt;a href="http://technorati.com/tags/DotDotNet" rel="tag"&gt;DotDotNet&lt;/a&gt;&lt;/div&gt;&lt;img src="http://blogs.ugidotnet.org/NExTLife/aggbug/95718.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Foffo</dc:creator>
            <guid>http://blogs.ugidotnet.org/NExTLife/archive/2009/03/16/dotdotnet-evento-accesso-ai-dati.aspx</guid>
            <pubDate>Mon, 16 Mar 2009 14:47:49 GMT</pubDate>
            <comments>http://blogs.ugidotnet.org/NExTLife/archive/2009/03/16/dotdotnet-evento-accesso-ai-dati.aspx#feedback</comments>
            <slash:comments>51</slash:comments>
            <wfw:commentRss>http://blogs.ugidotnet.org/NExTLife/comments/commentRss/95718.aspx</wfw:commentRss>
            <trackback:ping>http://blogs.ugidotnet.org/NExTLife/services/trackbacks/95718.aspx</trackback:ping>
        </item>
        <item>
            <title>WPF e l'ereditariet&amp;agrave; degli stili</title>
            <category>Tips</category>
            <category>WPF</category>
            <category>Xaml</category>
            <link>http://blogs.ugidotnet.org/NExTLife/archive/2009/03/11/wpf-e-lereditarietagrave-degli-stili.aspx</link>
            <description>&lt;p&gt;Gli Style di WPF sono certamente uno strumento molto comodo. Una caratteristica interessante degli Style è che uno ne può estendere un altro.&lt;/p&gt;  &lt;p&gt;Supponiamo di avere la seguente definizione:&lt;/p&gt;  &lt;p /&gt;  &lt;div class="wlWriterSmartContent" id="scid:F2210F5F-69EB-4d4c-AFF7-B8A050E9CC72:aaee4e54-6621-4043-96ec-145a9b61b8ad" style="padding-right: 0px; display: inline; padding-left: 0px; float: none; padding-bottom: 0px; margin: 0px; padding-top: 0px"&gt;&lt;pre style="width:100%;;"&gt;&lt;div&gt;&lt;!--

Code highlighting produced by Actipro CodeHighlighter (freeware)
http://www.CodeHighlighter.com/

--&gt;&lt;span style="color: #000000;"&gt;    &lt;/span&gt;&lt;span style="color: #0000FF;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000;"&gt;Style &lt;/span&gt;&lt;span style="color: #FF0000;"&gt;x:Key&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;="MainControlStyle"&lt;/span&gt;&lt;span style="color: #FF0000;"&gt; TargetType&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;="&lt;/span&gt;&lt;span style="color: #808000;"&gt;{x:Type Control}&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;"&lt;/span&gt;&lt;span style="color: #FF0000;"&gt; &lt;/span&gt;&lt;span style="color: #0000FF;"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color: #000000;"&gt;
        &lt;/span&gt;&lt;span style="color: #0000FF;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000;"&gt;Setter &lt;/span&gt;&lt;span style="color: #FF0000;"&gt;Property&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;="FontSize"&lt;/span&gt;&lt;span style="color: #FF0000;"&gt; Value&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;="10"&lt;/span&gt;&lt;span style="color: #FF0000;"&gt; &lt;/span&gt;&lt;span style="color: #0000FF;"&gt;/&amp;gt;&lt;/span&gt;&lt;span style="color: #000000;"&gt;
        &lt;/span&gt;&lt;span style="color: #0000FF;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000;"&gt;Setter &lt;/span&gt;&lt;span style="color: #FF0000;"&gt;Property&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;="FontWeight"&lt;/span&gt;&lt;span style="color: #FF0000;"&gt; Value&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;="Normal"&lt;/span&gt;&lt;span style="color: #FF0000;"&gt; &lt;/span&gt;&lt;span style="color: #0000FF;"&gt;/&amp;gt;&lt;/span&gt;&lt;span style="color: #000000;"&gt;
        &lt;/span&gt;&lt;span style="color: #0000FF;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000;"&gt;Setter &lt;/span&gt;&lt;span style="color: #FF0000;"&gt;Property&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;="Padding"&lt;/span&gt;&lt;span style="color: #FF0000;"&gt; Value&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;="2"&lt;/span&gt;&lt;span style="color: #FF0000;"&gt; &lt;/span&gt;&lt;span style="color: #0000FF;"&gt;/&amp;gt;&lt;/span&gt;&lt;span style="color: #000000;"&gt;
    &lt;/span&gt;&lt;span style="color: #0000FF;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #800000;"&gt;Style&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color: #000000;"&gt;
    
    &lt;/span&gt;&lt;span style="color: #0000FF;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000;"&gt;Style &lt;/span&gt;&lt;span style="color: #FF0000;"&gt;TargetType&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;="&lt;/span&gt;&lt;span style="color: #808000;"&gt;{x:Type Label}&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;"&lt;/span&gt;&lt;span style="color: #FF0000;"&gt; BasedOn&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;="&lt;/span&gt;&lt;span style="color: #808000;"&gt;{StaticResource MainControlStyle}&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;"&lt;/span&gt;&lt;span style="color: #FF0000;"&gt; &lt;/span&gt;&lt;span style="color: #0000FF;"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color: #000000;"&gt;
        &lt;/span&gt;&lt;span style="color: #0000FF;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000;"&gt;Setter &lt;/span&gt;&lt;span style="color: #FF0000;"&gt;Property&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;="FontWeight"&lt;/span&gt;&lt;span style="color: #FF0000;"&gt; Value&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;="Bold"&lt;/span&gt;&lt;span style="color: #FF0000;"&gt; &lt;/span&gt;&lt;span style="color: #0000FF;"&gt;/&amp;gt;&lt;/span&gt;&lt;span style="color: #000000;"&gt;
    &lt;/span&gt;&lt;span style="color: #0000FF;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #800000;"&gt;Style&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p /&gt;

&lt;p&gt;Con la proprietà BasedOn del secondo Style indichiamo che il secondo stile "eredita" le proprietà impostate da MainControlStyle.&lt;/p&gt;

&lt;p&gt;Cosa abbiamo prodotto? Abbiamo due stili: il primo applicabile ad ogni Control che imposta FontSize, FontWeight e Padding; il secondo, che verrà applicato ad ogni Label, che "sovrascrive" il FontWeight impostato dallo stile padre, forzandolo a Bold.&lt;/p&gt;

&lt;p&gt;Per completezza faccio un esempio in cui il primo stile non abbia una chiave che lo identifichi:&lt;/p&gt;

&lt;div class="wlWriterSmartContent" id="scid:F2210F5F-69EB-4d4c-AFF7-B8A050E9CC72:ff8ad7d8-17d6-4757-a8ce-af3b6a732532" style="padding-right: 0px; display: inline; padding-left: 0px; float: none; padding-bottom: 0px; margin: 0px; padding-top: 0px"&gt;&lt;pre style="width:100%;;"&gt;&lt;div&gt;&lt;!--

Code highlighting produced by Actipro CodeHighlighter (freeware)
http://www.CodeHighlighter.com/

--&gt;&lt;span style="color: #000000;"&gt;    &lt;/span&gt;&lt;span style="color: #0000FF;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000;"&gt;Style &lt;/span&gt;&lt;span style="color: #FF0000;"&gt;TargetType&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;="&lt;/span&gt;&lt;span style="color: #808000;"&gt;{x:Type Label}&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;"&lt;/span&gt;&lt;span style="color: #FF0000;"&gt; &lt;/span&gt;&lt;span style="color: #0000FF;"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color: #000000;"&gt;
        &lt;/span&gt;&lt;span style="color: #0000FF;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000;"&gt;Setter &lt;/span&gt;&lt;span style="color: #FF0000;"&gt;Property&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;="FontSize"&lt;/span&gt;&lt;span style="color: #FF0000;"&gt; Value&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;="10"&lt;/span&gt;&lt;span style="color: #FF0000;"&gt; &lt;/span&gt;&lt;span style="color: #0000FF;"&gt;/&amp;gt;&lt;/span&gt;&lt;span style="color: #000000;"&gt;
        &lt;/span&gt;&lt;span style="color: #0000FF;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000;"&gt;Setter &lt;/span&gt;&lt;span style="color: #FF0000;"&gt;Property&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;="FontWeight"&lt;/span&gt;&lt;span style="color: #FF0000;"&gt; Value&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;="Normal"&lt;/span&gt;&lt;span style="color: #FF0000;"&gt; &lt;/span&gt;&lt;span style="color: #0000FF;"&gt;/&amp;gt;&lt;/span&gt;&lt;span style="color: #000000;"&gt;
        &lt;/span&gt;&lt;span style="color: #0000FF;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000;"&gt;Setter &lt;/span&gt;&lt;span style="color: #FF0000;"&gt;Property&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;="Padding"&lt;/span&gt;&lt;span style="color: #FF0000;"&gt; Value&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;="2"&lt;/span&gt;&lt;span style="color: #FF0000;"&gt; &lt;/span&gt;&lt;span style="color: #0000FF;"&gt;/&amp;gt;&lt;/span&gt;&lt;span style="color: #000000;"&gt;
    &lt;/span&gt;&lt;span style="color: #0000FF;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #800000;"&gt;Style&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color: #000000;"&gt;
    
    &lt;/span&gt;&lt;span style="color: #0000FF;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000;"&gt;Style &lt;/span&gt;&lt;span style="color: #FF0000;"&gt;TargetType&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;="&lt;/span&gt;&lt;span style="color: #808000;"&gt;{x:Type Label}&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;"&lt;/span&gt;&lt;span style="color: #FF0000;"&gt; BasedOn&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;="&lt;/span&gt;&lt;span style="color: #808000;"&gt;{StaticResource {x:Type Label}}&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;"&lt;/span&gt;&lt;span style="color: #FF0000;"&gt; &lt;/span&gt;&lt;span style="color: #0000FF;"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color: #000000;"&gt;
        &lt;/span&gt;&lt;span style="color: #0000FF;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000;"&gt;Setter &lt;/span&gt;&lt;span style="color: #FF0000;"&gt;Property&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;="FontWeight"&lt;/span&gt;&lt;span style="color: #FF0000;"&gt; Value&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;="Bold"&lt;/span&gt;&lt;span style="color: #FF0000;"&gt; &lt;/span&gt;&lt;span style="color: #0000FF;"&gt;/&amp;gt;&lt;/span&gt;&lt;span style="color: #000000;"&gt;
    &lt;/span&gt;&lt;span style="color: #0000FF;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #800000;"&gt;Style&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;Una sola nota: il TargetType dello stile che eredita deve essere compatibile con il TargetType dello stile padre, in sostanza lo stesso tipo o una sottoclasse.&lt;/p&gt;

&lt;p&gt; &lt;/p&gt;

&lt;p&gt;Matteo&lt;/p&gt;

&lt;p&gt; &lt;/p&gt;

&lt;div class="wlWriterSmartContent" id="scid:0767317B-992E-4b12-91E0-4F059A8CECA8:eccdc5d0-79c9-4a20-85ba-57a723200c54" style="padding-right: 0px; display: inline; padding-left: 0px; padding-bottom: 0px; margin: 0px; padding-top: 0px"&gt;Technorati Tag: &lt;a href="http://technorati.com/tags/WPF" rel="tag"&gt;WPF&lt;/a&gt;,&lt;a href="http://technorati.com/tags/XAML" rel="tag"&gt;XAML&lt;/a&gt;,&lt;a href="http://technorati.com/tags/Style" rel="tag"&gt;Style&lt;/a&gt;,&lt;a href="http://technorati.com/tags/Ereditariet%c3%a0" rel="tag"&gt;Ereditarietà&lt;/a&gt;&lt;/div&gt;&lt;img src="http://blogs.ugidotnet.org/NExTLife/aggbug/95669.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Foffo</dc:creator>
            <guid>http://blogs.ugidotnet.org/NExTLife/archive/2009/03/11/wpf-e-lereditarietagrave-degli-stili.aspx</guid>
            <pubDate>Wed, 11 Mar 2009 13:50:10 GMT</pubDate>
            <comments>http://blogs.ugidotnet.org/NExTLife/archive/2009/03/11/wpf-e-lereditarietagrave-degli-stili.aspx#feedback</comments>
            <slash:comments>36</slash:comments>
            <wfw:commentRss>http://blogs.ugidotnet.org/NExTLife/comments/commentRss/95669.aspx</wfw:commentRss>
            <trackback:ping>http://blogs.ugidotnet.org/NExTLife/services/trackbacks/95669.aspx</trackback:ping>
        </item>
        <item>
            <title>WPF - Usare pi&amp;ugrave; file di risorse</title>
            <category>Tips</category>
            <category>WPF</category>
            <category>Xaml</category>
            <link>http://blogs.ugidotnet.org/NExTLife/archive/2009/03/11/wpf-usare-piugrave-file-di-risorse.aspx</link>
            <description>&lt;p&gt;Può capitare di volere fare riferimento a più file di risorse all'interno di una Window o di uno UserControl e farli magari convivere con le risorse definite localmente. La classe ResourceDictionary ci viene incontro con la proprietà MergedDictionary.&lt;/p&gt;  &lt;p /&gt;  &lt;div class="wlWriterSmartContent" id="scid:F2210F5F-69EB-4d4c-AFF7-B8A050E9CC72:e945ffd5-b271-4f0a-b282-fed9bfe37912" style="padding-right: 0px; display: inline; padding-left: 0px; float: none; padding-bottom: 0px; margin: 0px; padding-top: 0px"&gt;&lt;pre style="width:100%;;"&gt;&lt;div&gt;&lt;!--

Code highlighting produced by Actipro CodeHighlighter (freeware)
http://www.CodeHighlighter.com/

--&gt;&lt;span style="color: #0000FF;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000;"&gt;Window.Resources&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color: #000000;"&gt;
    &lt;/span&gt;&lt;span style="color: #0000FF;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000;"&gt;ResourceDictionary&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color: #000000;"&gt;
        &lt;/span&gt;&lt;span style="color: #0000FF;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000;"&gt;ResourceDictionary.MergedDictionaries&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color: #000000;"&gt;
            &lt;/span&gt;&lt;span style="color: #0000FF;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000;"&gt;ResourceDictionary &lt;/span&gt;&lt;span style="color: #FF0000;"&gt;Source&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;="../../MainResources.xaml"&lt;/span&gt;&lt;span style="color: #FF0000;"&gt; &lt;/span&gt;&lt;span style="color: #0000FF;"&gt;/&amp;gt;&lt;/span&gt;&lt;span style="color: #000000;"&gt;
            &lt;/span&gt;&lt;span style="color: #0000FF;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000;"&gt;ResourceDictionary &lt;/span&gt;&lt;span style="color: #FF0000;"&gt;Source&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;="../../Styles.xaml"&lt;/span&gt;&lt;span style="color: #FF0000;"&gt; &lt;/span&gt;&lt;span style="color: #0000FF;"&gt;/&amp;gt;&lt;/span&gt;&lt;span style="color: #000000;"&gt;
        &lt;/span&gt;&lt;span style="color: #0000FF;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #800000;"&gt;ResourceDictionary.MergedDictionaries&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color: #000000;"&gt;
        &lt;/span&gt;&lt;span style="color: #0000FF;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000;"&gt;DataTemplate &lt;/span&gt;&lt;span style="color: #FF0000;"&gt;x:Key&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;="MyTemplate"&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color: #000000;"&gt;
            ....
        &lt;/span&gt;&lt;span style="color: #0000FF;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #800000;"&gt;DataTemplate&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color: #000000;"&gt;
    &lt;/span&gt;&lt;span style="color: #0000FF;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #800000;"&gt;ResourceDictionary&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color: #000000;"&gt;
&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #800000;"&gt;Window.Resources&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p /&gt;

&lt;p&gt;In questo modo possiamo gestire le nostre Resources come una ResourceDictionary che sarà il risultato dell'unione delle nostre risorse locali e le ResourceDictionary definite in file esterni.&lt;/p&gt;

&lt;p&gt; &lt;/p&gt;

&lt;p&gt;Matteo&lt;/p&gt;

&lt;p&gt; &lt;/p&gt;

&lt;p&gt; &lt;/p&gt;

&lt;div class="wlWriterSmartContent" id="scid:0767317B-992E-4b12-91E0-4F059A8CECA8:b1430e26-e423-408c-b5f5-e3fe726e1c70" style="padding-right: 0px; display: inline; padding-left: 0px; padding-bottom: 0px; margin: 0px; padding-top: 0px"&gt;Technorati Tag: &lt;a href="http://technorati.com/tags/WPF" rel="tag"&gt;WPF&lt;/a&gt;,&lt;a href="http://technorati.com/tags/XAML" rel="tag"&gt;XAML&lt;/a&gt;,&lt;a href="http://technorati.com/tags/Resources" rel="tag"&gt;Resources&lt;/a&gt;,&lt;a href="http://technorati.com/tags/ResourceDictionary" rel="tag"&gt;ResourceDictionary&lt;/a&gt;&lt;/div&gt;&lt;img src="http://blogs.ugidotnet.org/NExTLife/aggbug/95668.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Foffo</dc:creator>
            <guid>http://blogs.ugidotnet.org/NExTLife/archive/2009/03/11/wpf-usare-piugrave-file-di-risorse.aspx</guid>
            <pubDate>Wed, 11 Mar 2009 13:49:50 GMT</pubDate>
            <comments>http://blogs.ugidotnet.org/NExTLife/archive/2009/03/11/wpf-usare-piugrave-file-di-risorse.aspx#feedback</comments>
            <slash:comments>51</slash:comments>
            <wfw:commentRss>http://blogs.ugidotnet.org/NExTLife/comments/commentRss/95668.aspx</wfw:commentRss>
            <trackback:ping>http://blogs.ugidotnet.org/NExTLife/services/trackbacks/95668.aspx</trackback:ping>
        </item>
        <item>
            <title>Caricare un Template in modo condizionale</title>
            <category>WPF</category>
            <category>Xaml</category>
            <link>http://blogs.ugidotnet.org/NExTLife/archive/2009/03/10/caricare-un-template-in-modo-condizionale.aspx</link>
            <description>&lt;p&gt;Come avevo anticipato nel &lt;a href="http://blogs.ugidotnet.org/NExTLife/archive/2009/02/19/wpf-in-salsa-mvvm-e-i-template.aspx" target="_blank"&gt;post&lt;/a&gt; precedente vorrei esporre un tip per poter selezionare un template per rappresentare un determinato dato in base ad una condizione.&lt;/p&gt;  &lt;p&gt;Supponiamo di avere una situazione simile al post precedente, in cui ho un ViewModel che mi rappresenta un ordine: OrderViewModel. Voglio rappresentare OrderViewModel in tre modi diversi in base al fatto che esso rappresenti la scheda di un ordine, un ordine in modifica o un ordine nuovo.&lt;/p&gt;  &lt;p&gt;Per fare ciò implemento tre View diverse con tre UserControl e le associo ad altrettanti ControlTemplate nel seguente modo:&lt;/p&gt;  &lt;div class="wlWriterSmartContent" id="scid:F2210F5F-69EB-4d4c-AFF7-B8A050E9CC72:b0be6fab-3185-4c85-a2a2-e76520e1c8ab" style="padding-right: 0px; display: inline; padding-left: 0px; float: none; padding-bottom: 0px; margin: 0px; padding-top: 0px"&gt;&lt;pre style="width:100%;;"&gt;&lt;div&gt;&lt;!--

Code highlighting produced by Actipro CodeHighlighter (freeware)
http://www.CodeHighlighter.com/

--&gt;&lt;span style="color: #000000;"&gt;    &lt;/span&gt;&lt;span style="color: #0000FF;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000;"&gt;ControlTemplate &lt;/span&gt;&lt;span style="color: #FF0000;"&gt;x:Key&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;="OrderDetailTemplate"&lt;/span&gt;&lt;span style="color: #FF0000;"&gt; TargetType&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;="&lt;/span&gt;&lt;span style="color: #808000;"&gt;{x:Type Control}&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;"&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color: #000000;"&gt;
        &lt;/span&gt;&lt;span style="color: #0000FF;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000;"&gt;View:OderDetailView &lt;/span&gt;&lt;span style="color: #0000FF;"&gt;/&amp;gt;&lt;/span&gt;&lt;span style="color: #000000;"&gt;
    &lt;/span&gt;&lt;span style="color: #0000FF;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #800000;"&gt;ControlTemplate&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color: #000000;"&gt;

    &lt;/span&gt;&lt;span style="color: #0000FF;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000;"&gt;ControlTemplate &lt;/span&gt;&lt;span style="color: #FF0000;"&gt;x:Key&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;="OrderCreationTemplate"&lt;/span&gt;&lt;span style="color: #FF0000;"&gt; TargetType&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;="&lt;/span&gt;&lt;span style="color: #808000;"&gt;{x:Type Control}&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;"&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color: #000000;"&gt;
        &lt;/span&gt;&lt;span style="color: #0000FF;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000;"&gt;View:OrderCreationView &lt;/span&gt;&lt;span style="color: #0000FF;"&gt;/&amp;gt;&lt;/span&gt;&lt;span style="color: #000000;"&gt;
    &lt;/span&gt;&lt;span style="color: #0000FF;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #800000;"&gt;ControlTemplate&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color: #000000;"&gt;

    &lt;/span&gt;&lt;span style="color: #0000FF;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000;"&gt;ControlTemplate &lt;/span&gt;&lt;span style="color: #FF0000;"&gt;x:Key&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;="OrderModifyTemplate"&lt;/span&gt;&lt;span style="color: #FF0000;"&gt; TargetType&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;="&lt;/span&gt;&lt;span style="color: #808000;"&gt;{x:Type Control}&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;"&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color: #000000;"&gt;
        &lt;/span&gt;&lt;span style="color: #0000FF;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000;"&gt;View:OderModifyView &lt;/span&gt;&lt;span style="color: #0000FF;"&gt;/&amp;gt;&lt;/span&gt;&lt;span style="color: #000000;"&gt;
    &lt;/span&gt;&lt;span style="color: #0000FF;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #800000;"&gt;ControlTemplate&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;Perchè faccio tre ControlTemplate? Perchè in questo modo posso creare un DataTemplate associato ad OrderViewModel che carica il template corretto a seconda della condizione definita prima in questo modo:&lt;/p&gt;

&lt;p /&gt;

&lt;div class="wlWriterSmartContent" id="scid:F2210F5F-69EB-4d4c-AFF7-B8A050E9CC72:805a4e96-96cc-4c05-a3cf-a8372efd0a84" style="padding-right: 0px; display: inline; padding-left: 0px; float: none; padding-bottom: 0px; margin: 0px; padding-top: 0px"&gt;&lt;pre style="width:100%;;"&gt;&lt;div&gt;&lt;!--

Code highlighting produced by Actipro CodeHighlighter (freeware)
http://www.CodeHighlighter.com/

--&gt;&lt;span style="color: #000000;"&gt;    &lt;/span&gt;&lt;span style="color: #0000FF;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000;"&gt;DataTemplate &lt;/span&gt;&lt;span style="color: #FF0000;"&gt;DataType&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;="&lt;/span&gt;&lt;span style="color: #808000;"&gt;{x:Type ViewModel:OrderViewModel}&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;"&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color: #000000;"&gt;
        &lt;/span&gt;&lt;span style="color: #0000FF;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000;"&gt;Control &lt;/span&gt;&lt;span style="color: #FF0000;"&gt;x:Name&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;="control"&lt;/span&gt;&lt;span style="color: #FF0000;"&gt; Template&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;="&lt;/span&gt;&lt;span style="color: #808000;"&gt;{StaticResource OrderDetailTemplate}&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;"&lt;/span&gt;&lt;span style="color: #FF0000;"&gt; &lt;/span&gt;&lt;span style="color: #0000FF;"&gt;/&amp;gt;&lt;/span&gt;&lt;span style="color: #000000;"&gt;
        &lt;/span&gt;&lt;span style="color: #0000FF;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000;"&gt;DataTemplate.Triggers&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color: #000000;"&gt;
            &lt;/span&gt;&lt;span style="color: #0000FF;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000;"&gt;DataTrigger &lt;/span&gt;&lt;span style="color: #FF0000;"&gt;Binding&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;="&lt;/span&gt;&lt;span style="color: #808000;"&gt;{Binding Path=IsModifying}&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;"&lt;/span&gt;&lt;span style="color: #FF0000;"&gt; Value&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;="True"&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color: #000000;"&gt;
                &lt;/span&gt;&lt;span style="color: #0000FF;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000;"&gt;Setter &lt;/span&gt;&lt;span style="color: #FF0000;"&gt;TargetName&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;="control"&lt;/span&gt;&lt;span style="color: #FF0000;"&gt; Property&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;="Template"&lt;/span&gt;&lt;span style="color: #FF0000;"&gt; 
                        Value&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;="&lt;/span&gt;&lt;span style="color: #808000;"&gt;{StaticResource OrderModifyTemplate}&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;"&lt;/span&gt;&lt;span style="color: #FF0000;"&gt; &lt;/span&gt;&lt;span style="color: #0000FF;"&gt;/&amp;gt;&lt;/span&gt;&lt;span style="color: #000000;"&gt;
            &lt;/span&gt;&lt;span style="color: #0000FF;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #800000;"&gt;DataTrigger&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color: #000000;"&gt;
            &lt;/span&gt;&lt;span style="color: #0000FF;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000;"&gt;DataTrigger &lt;/span&gt;&lt;span style="color: #FF0000;"&gt;Binding&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;="&lt;/span&gt;&lt;span style="color: #808000;"&gt;{Binding Path=IsNew}&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;"&lt;/span&gt;&lt;span style="color: #FF0000;"&gt; Value&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;="True"&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color: #000000;"&gt;
                &lt;/span&gt;&lt;span style="color: #0000FF;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000;"&gt;Setter &lt;/span&gt;&lt;span style="color: #FF0000;"&gt;TargetName&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;="control"&lt;/span&gt;&lt;span style="color: #FF0000;"&gt; Property&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;="Template"&lt;/span&gt;&lt;span style="color: #FF0000;"&gt; 
                        Value&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;="&lt;/span&gt;&lt;span style="color: #808000;"&gt;{StaticResource OrderCreationTemplate}&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;"&lt;/span&gt;&lt;span style="color: #FF0000;"&gt; &lt;/span&gt;&lt;span style="color: #0000FF;"&gt;/&amp;gt;&lt;/span&gt;&lt;span style="color: #000000;"&gt;
            &lt;/span&gt;&lt;span style="color: #0000FF;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #800000;"&gt;DataTrigger&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color: #000000;"&gt;
        &lt;/span&gt;&lt;span style="color: #0000FF;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #800000;"&gt;DataTemplate.Triggers&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color: #000000;"&gt;
    &lt;/span&gt;&lt;span style="color: #0000FF;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #800000;"&gt;DataTemplate&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p /&gt;

&lt;p&gt;Come si vede dal codice XAML per cambiare il Template associato al Control, usato dal DataTemplate per visualizzare il mio OrderViewModel, è sufficiente definire dei &lt;a href="http://msdn.microsoft.com/en-us/library/system.windows.datatrigger.aspx" target="_blank"&gt;DataTrigger&lt;/a&gt; che verificano le proprietà di interesse (nel mio caso IsModifying e IsNew).&lt;/p&gt;

&lt;p&gt;Un DataTrigger permette di definire delle condizioni sulle proprietà dell'oggetto rappresentato dal DataTemplate; quando la condizione è verificata vengono eseguiti i Setter contenuti al suo interno, che si occupano si settare il valore &lt;em&gt;Value&lt;/em&gt; alla proprietà &lt;em&gt;Property&lt;/em&gt; dell'elemento &lt;em&gt;TargetName&lt;/em&gt;. Si deve tenere conto che i DataTrigger vengono eseguiti in cascata; vince quindi l'ultima condizione verificata. Nel mio caso è importante tenere conto dell'ordine perchè nel Model quando la proprietà IsNew è True, risulta True anche la proprietà IsModifying. Per ovviare all'inconveniente di avere più condizioni vere simultaneamente avrei potuto usare dei &lt;a href="http://msdn.microsoft.com/en-us/library/system.windows.multidatatrigger.aspx" target="_blank"&gt;MultiDataTrigger&lt;/a&gt; per mettere più condizioni in And, in modo da renderle mutuamente esclusive.&lt;/p&gt;

&lt;p&gt; &lt;/p&gt;

&lt;p&gt;Matteo&lt;/p&gt;

&lt;p&gt; &lt;/p&gt;

&lt;div class="wlWriterSmartContent" id="scid:0767317B-992E-4b12-91E0-4F059A8CECA8:6ec7b88e-fe55-4d50-a393-e18edad4e3c4" style="padding-right: 0px; display: inline; padding-left: 0px; padding-bottom: 0px; margin: 0px; padding-top: 0px"&gt;Technorati Tag: &lt;a href="http://technorati.com/tags/WPF" rel="tag"&gt;WPF&lt;/a&gt;,&lt;a href="http://technorati.com/tags/XAML" rel="tag"&gt;XAML&lt;/a&gt;,&lt;a href="http://technorati.com/tags/DataTemplate" rel="tag"&gt;DataTemplate&lt;/a&gt;,&lt;a href="http://technorati.com/tags/ControlTemplate" rel="tag"&gt;ControlTemplate&lt;/a&gt;,&lt;a href="http://technorati.com/tags/DataTrigger" rel="tag"&gt;DataTrigger&lt;/a&gt;&lt;/div&gt;&lt;img src="http://blogs.ugidotnet.org/NExTLife/aggbug/95667.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Foffo</dc:creator>
            <guid>http://blogs.ugidotnet.org/NExTLife/archive/2009/03/10/caricare-un-template-in-modo-condizionale.aspx</guid>
            <pubDate>Tue, 10 Mar 2009 17:26:26 GMT</pubDate>
            <comments>http://blogs.ugidotnet.org/NExTLife/archive/2009/03/10/caricare-un-template-in-modo-condizionale.aspx#feedback</comments>
            <slash:comments>17</slash:comments>
            <wfw:commentRss>http://blogs.ugidotnet.org/NExTLife/comments/commentRss/95667.aspx</wfw:commentRss>
            <trackback:ping>http://blogs.ugidotnet.org/NExTLife/services/trackbacks/95667.aspx</trackback:ping>
        </item>
        <item>
            <title>WPF in salsa MVVM e i template</title>
            <category>C#</category>
            <category>WPF</category>
            <category>Xaml</category>
            <link>http://blogs.ugidotnet.org/NExTLife/archive/2009/02/19/wpf-in-salsa-mvvm-e-i-template.aspx</link>
            <description>&lt;p&gt;Uno degli aspetti di WPF che più mi piace sono i template. &lt;a href="http://msdn.microsoft.com/en-gb/library/ms742521.aspx" target="_blank"&gt;Qui&lt;/a&gt; si trova una panoramica su ciò che si può fare.&lt;/p&gt;  &lt;p&gt;I DataTemplate sono molto comodi quando usiamo MVVM; a parer mio, sono la risposta alla domanda: "Bene ora ho il ViewModel e la View. Come li relaziono tra loro?".&lt;/p&gt;  &lt;p&gt;Come funzionano? Tramite i DataTemplate puoi creare una associazione tra uno specifico tipo di dato ed un template che lo rappresenta. Facciamo qualche esempio: supponiamo di avere un ViewModel di tipo CustomerViewModel e di volerlo associare alla sua View, uno UserControl chiamato CustomerDetailView; potremmo scrivere qualcosa del tipo:&lt;/p&gt;  &lt;p /&gt;  &lt;div class="wlWriterSmartContent" id="scid:F2210F5F-69EB-4d4c-AFF7-B8A050E9CC72:1eb5f212-adba-4544-bac4-a398dbb2aadf" style="padding-right: 0px; display: inline; padding-left: 0px; float: none; padding-bottom: 0px; margin: 0px; padding-top: 0px"&gt;&lt;pre style="width:100%;;"&gt;&lt;div&gt;&lt;!--

Code highlighting produced by Actipro CodeHighlighter (freeware)
http://www.CodeHighlighter.com/

--&gt;&lt;span style="color: #000000;"&gt;    &lt;/span&gt;&lt;span style="color: #0000FF;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000;"&gt;DataTemplate &lt;/span&gt;&lt;span style="color: #FF0000;"&gt;DataType&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;="&lt;/span&gt;&lt;span style="color: #808000;"&gt;{x:Type ViewModel:CustomerViewModel}&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;"&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color: #000000;"&gt;
        &lt;/span&gt;&lt;span style="color: #0000FF;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000;"&gt;View:CustomerView &lt;/span&gt;&lt;span style="color: #0000FF;"&gt;/&amp;gt;&lt;/span&gt;&lt;span style="color: #000000;"&gt;
    &lt;/span&gt;&lt;span style="color: #0000FF;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #800000;"&gt;DataTemplate&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p /&gt;

&lt;p&gt;Supponiamo invece di voler definire direttamente all'interno del DataTemplate la struttura del Template; possiamo farlo, per esempio, in questo modo:&lt;/p&gt;

&lt;p /&gt;

&lt;div class="wlWriterSmartContent" id="scid:F2210F5F-69EB-4d4c-AFF7-B8A050E9CC72:2f8162ea-9f24-45a9-9f4a-99febce465be" style="padding-right: 0px; display: inline; padding-left: 0px; float: none; padding-bottom: 0px; margin: 0px; padding-top: 0px"&gt;&lt;pre style="width:100%;;"&gt;&lt;div&gt;&lt;!--

Code highlighting produced by Actipro CodeHighlighter (freeware)
http://www.CodeHighlighter.com/

--&gt;&lt;span style="color: #000000;"&gt;    &lt;/span&gt;&lt;span style="color: #0000FF;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000;"&gt;DataTemplate &lt;/span&gt;&lt;span style="color: #FF0000;"&gt;DataType&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;="&lt;/span&gt;&lt;span style="color: #808000;"&gt;{x:Type ViewModel:CustomerViewModel}&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;"&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color: #000000;"&gt;
        &lt;/span&gt;&lt;span style="color: #0000FF;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000;"&gt;Grid&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color: #000000;"&gt;
            &lt;/span&gt;&lt;span style="color: #0000FF;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000;"&gt;Grid.ColumnDefinitions&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color: #000000;"&gt;
                &lt;/span&gt;&lt;span style="color: #0000FF;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000;"&gt;ColumnDefinition &lt;/span&gt;&lt;span style="color: #0000FF;"&gt;/&amp;gt;&lt;/span&gt;&lt;span style="color: #000000;"&gt;
                &lt;/span&gt;&lt;span style="color: #0000FF;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000;"&gt;ColumnDefinition &lt;/span&gt;&lt;span style="color: #0000FF;"&gt;/&amp;gt;&lt;/span&gt;&lt;span style="color: #000000;"&gt;
                ... 
            &lt;/span&gt;&lt;span style="color: #0000FF;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #800000;"&gt;Grid.ColumnDefinitions&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color: #000000;"&gt;
            
            &lt;/span&gt;&lt;span style="color: #0000FF;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000;"&gt;TextBlock &lt;/span&gt;&lt;span style="color: #FF0000;"&gt;Grid.Column&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;="0"&lt;/span&gt;&lt;span style="color: #FF0000;"&gt; Text&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;="Company Name"&lt;/span&gt;&lt;span style="color: #FF0000;"&gt; &lt;/span&gt;&lt;span style="color: #0000FF;"&gt;/&amp;gt;&lt;/span&gt;&lt;span style="color: #000000;"&gt;
            &lt;/span&gt;&lt;span style="color: #0000FF;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000;"&gt;TextBox &lt;/span&gt;&lt;span style="color: #FF0000;"&gt;Grid.Column&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;="1"&lt;/span&gt;&lt;span style="color: #FF0000;"&gt; Text&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;="&lt;/span&gt;&lt;span style="color: #808000;"&gt;{Binding Path=CompanyName}&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;"&lt;/span&gt;&lt;span style="color: #FF0000;"&gt; &lt;/span&gt;&lt;span style="color: #0000FF;"&gt;/&amp;gt;&lt;/span&gt;&lt;span style="color: #000000;"&gt;
            ...
        &lt;/span&gt;&lt;span style="color: #0000FF;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #800000;"&gt;Grid&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color: #000000;"&gt;
    &lt;/span&gt;&lt;span style="color: #0000FF;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #800000;"&gt;DataTemplate&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p /&gt;

&lt;p&gt;In questo modo siamo andati a definire una regola di questo tipo: "quando ti do un CustomerViewModel tu rappresentalo come questo Template".&lt;/p&gt;

&lt;p&gt;Questa regola vale all'interno dello scope di azione del template. Se, per esempio, volessimo che i nostri template siano condivisi da più parti della nostra applicazione, sarà sufficiente inserire la loro definizione all'interno di una ResourceDictionary, da includere nelle nostre Window o nei nostri UserControl. Se invece volessimo usare un determinato template solo per una Window o uno UserControl, basterà definirlo all'interno delle loro risorse locali.&lt;/p&gt;

&lt;p&gt;Come facciamo quindi, in definitiva, ad usare questi template? Facciamo l'esempio più semplice ovvero visualizziamo dentro una Window il CustomerViewModel di cui sopra:&lt;/p&gt;

&lt;div class="wlWriterSmartContent" id="scid:F2210F5F-69EB-4d4c-AFF7-B8A050E9CC72:1e839ee8-a047-4ae7-93a5-d16a825aa7b3" style="padding-right: 0px; display: inline; padding-left: 0px; float: none; padding-bottom: 0px; margin: 0px; padding-top: 0px"&gt;&lt;pre style="width:100%;;"&gt;&lt;div&gt;&lt;!--

Code highlighting produced by Actipro CodeHighlighter (freeware)
http://www.CodeHighlighter.com/

--&gt;&lt;span style="color: #000000;"&gt;    &lt;/span&gt;&lt;span style="color: #0000FF;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000;"&gt;Window &lt;/span&gt;&lt;span style="color: #FF0000;"&gt;x:Class&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;="xxx.Presentation.WPF.UI.View.CustomerView"&lt;/span&gt;&lt;span style="color: #FF0000;"&gt;
        xmlns&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;="http://schemas.microsoft.com/winfx/2006/xaml/presentation"&lt;/span&gt;&lt;span style="color: #FF0000;"&gt;
        xmlns:x&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;="http://schemas.microsoft.com/winfx/2006/xaml"&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color: #000000;"&gt;
        &lt;/span&gt;&lt;span style="color: #0000FF;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000;"&gt;Window.Resources&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color: #000000;"&gt;
            &lt;/span&gt;&lt;span style="color: #0000FF;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000;"&gt;ResourceDictionary &lt;/span&gt;&lt;span style="color: #FF0000;"&gt;Source&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;="../MainResources.xaml"&lt;/span&gt;&lt;span style="color: #FF0000;"&gt; &lt;/span&gt;&lt;span style="color: #0000FF;"&gt;/&amp;gt;&lt;/span&gt;&lt;span style="color: #000000;"&gt;
        &lt;/span&gt;&lt;span style="color: #0000FF;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #800000;"&gt;Window.Resources&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color: #000000;"&gt;
        &lt;/span&gt;&lt;span style="color: #0000FF;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000;"&gt;DockPanel&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color: #000000;"&gt;
            &lt;/span&gt;&lt;span style="color: #0000FF;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000;"&gt;HeaderedContentControl
                &lt;/span&gt;&lt;span style="color: #FF0000;"&gt;DockPanel.Dock&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;="Top"&lt;/span&gt;&lt;span style="color: #FF0000;"&gt;
                Content&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;="&lt;/span&gt;&lt;span style="color: #808000;"&gt;{Binding Path=Customer}&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;"&lt;/span&gt;&lt;span style="color: #FF0000;"&gt; &lt;/span&gt;&lt;span style="color: #0000FF;"&gt;/&amp;gt;&lt;/span&gt;&lt;span style="color: #000000;"&gt;
        &lt;/span&gt;&lt;span style="color: #0000FF;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #800000;"&gt;DockPanel&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color: #000000;"&gt;
    &lt;/span&gt;&lt;span style="color: #0000FF;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #800000;"&gt;Window&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;Impostando come proprietà Content dell'HeaderedContentControl il Binding corretto (in questo esempio supponiamo di avere come DataContext della Window una classe che contiene una proprietà Customer di tipo CustomerViewModel), visualizzeremo all'interno della Window il template definito sopra. Ovviamente non è obbligatorio usare un HeaderedContentControl.&lt;/p&gt;

&lt;p&gt;L'esempio non è un caso eclatante; passiamo quindi ad un esempio un po' più articolato. Supponiamo di voler realizzare una OrderListView che contiene quindi una lista di ordini, con una sezione dedicata ai dettagli dell'ordine selezionato e che presenti un form di ricerca. Per realizzarla potremmo decidere di creare un ViewModel per ogni entità coinvolta: OrderViewModel, OrderSearchFormViewModel e un OrderListViewModel organizzato più o meno così:&lt;/p&gt;

&lt;p /&gt;

&lt;div class="wlWriterSmartContent" id="scid:F2210F5F-69EB-4d4c-AFF7-B8A050E9CC72:69774985-da70-4e7a-a199-491235ad5e8a" style="padding-right: 0px; display: inline; padding-left: 0px; float: none; padding-bottom: 0px; margin: 0px; padding-top: 0px"&gt;&lt;pre style="width:100%;;"&gt;&lt;div&gt;&lt;!--

Code highlighting produced by Actipro CodeHighlighter (freeware)
http://www.CodeHighlighter.com/

--&gt;&lt;span style="color: #000000;"&gt;    &lt;/span&gt;&lt;span style="color: #0000FF;"&gt;public&lt;/span&gt;&lt;span style="color: #000000;"&gt; &lt;/span&gt;&lt;span style="color: #0000FF;"&gt;class&lt;/span&gt;&lt;span style="color: #000000;"&gt; OrderListViewModel
    {
        &lt;/span&gt;&lt;span style="color: #0000FF;"&gt;public&lt;/span&gt;&lt;span style="color: #000000;"&gt; OrderSearchFormViewModel SearchForm { &lt;/span&gt;&lt;span style="color: #0000FF;"&gt;get&lt;/span&gt;&lt;span style="color: #000000;"&gt;; &lt;/span&gt;&lt;span style="color: #0000FF;"&gt;set&lt;/span&gt;&lt;span style="color: #000000;"&gt;; }

        &lt;/span&gt;&lt;span style="color: #0000FF;"&gt;public&lt;/span&gt;&lt;span style="color: #000000;"&gt; List&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #000000;"&gt;OrderViewModel&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color: #000000;"&gt; Orders { &lt;/span&gt;&lt;span style="color: #0000FF;"&gt;get&lt;/span&gt;&lt;span style="color: #000000;"&gt;; &lt;/span&gt;&lt;span style="color: #0000FF;"&gt;set&lt;/span&gt;&lt;span style="color: #000000;"&gt;; }
    }&lt;/span&gt;&lt;/div&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p /&gt;

&lt;p&gt;Il processo è poi analogo a quello precedente: ogni ViewModel ha una relativa View; questi sono collegati tra loro con dei DataTemplate. Possiamo quindi costruire uno UserControl in questo modo:&lt;/p&gt;

&lt;p /&gt;

&lt;div class="wlWriterSmartContent" id="scid:F2210F5F-69EB-4d4c-AFF7-B8A050E9CC72:a52a90c6-f3a4-43e2-9534-5ae73c2b1d20" style="padding-right: 0px; display: inline; padding-left: 0px; float: none; padding-bottom: 0px; margin: 0px; padding-top: 0px"&gt;&lt;pre style="width:100%;;"&gt;&lt;div&gt;&lt;!--

Code highlighting produced by Actipro CodeHighlighter (freeware)
http://www.CodeHighlighter.com/

--&gt;&lt;span style="color: #0000FF;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000;"&gt;UserControl &lt;/span&gt;&lt;span style="color: #FF0000;"&gt;x:Class&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;="xxx.Presentation.WPF.UI.View.OrderListView"&lt;/span&gt;&lt;span style="color: #FF0000;"&gt;
    xmlns&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;="http://schemas.microsoft.com/winfx/2006/xaml/presentation"&lt;/span&gt;&lt;span style="color: #FF0000;"&gt;
    xmlns:x&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;="http://schemas.microsoft.com/winfx/2006/xaml"&lt;/span&gt;&lt;span style="color: #FF0000;"&gt;
    xmlns:View&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;="clr-namespace:xxx.Presentation.WPF.UI.View"&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color: #000000;"&gt;
    &lt;/span&gt;&lt;span style="color: #0000FF;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000;"&gt;UserControl.Resources&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color: #000000;"&gt;
        &lt;/span&gt;&lt;span style="color: #0000FF;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000;"&gt;ResourceDictionary &lt;/span&gt;&lt;span style="color: #FF0000;"&gt;Source&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;="../MainResources.xaml"&lt;/span&gt;&lt;span style="color: #FF0000;"&gt; &lt;/span&gt;&lt;span style="color: #0000FF;"&gt;/&amp;gt;&lt;/span&gt;&lt;span style="color: #000000;"&gt;
    &lt;/span&gt;&lt;span style="color: #0000FF;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #800000;"&gt;UserControl.Resources&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color: #000000;"&gt;
    &lt;/span&gt;&lt;span style="color: #0000FF;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000;"&gt;DockPanel&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color: #000000;"&gt;
        &lt;/span&gt;&lt;span style="color: #0000FF;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000;"&gt;Grid &lt;/span&gt;&lt;span style="color: #FF0000;"&gt;DockPanel.Dock&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;="Top"&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color: #000000;"&gt;
            &lt;/span&gt;&lt;span style="color: #0000FF;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000;"&gt;Grid.RowDefinitions&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color: #000000;"&gt;
                &lt;/span&gt;&lt;span style="color: #0000FF;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000;"&gt;RowDefinition &lt;/span&gt;&lt;span style="color: #FF0000;"&gt;Height&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;="Auto"&lt;/span&gt;&lt;span style="color: #FF0000;"&gt; &lt;/span&gt;&lt;span style="color: #0000FF;"&gt;/&amp;gt;&lt;/span&gt;&lt;span style="color: #000000;"&gt;
                &lt;/span&gt;&lt;span style="color: #0000FF;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000;"&gt;RowDefinition &lt;/span&gt;&lt;span style="color: #FF0000;"&gt;Height&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;="*"&lt;/span&gt;&lt;span style="color: #FF0000;"&gt; &lt;/span&gt;&lt;span style="color: #0000FF;"&gt;/&amp;gt;&lt;/span&gt;&lt;span style="color: #000000;"&gt;
                &lt;/span&gt;&lt;span style="color: #0000FF;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000;"&gt;RowDefinition &lt;/span&gt;&lt;span style="color: #FF0000;"&gt;Height&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;="*"&lt;/span&gt;&lt;span style="color: #FF0000;"&gt; &lt;/span&gt;&lt;span style="color: #0000FF;"&gt;/&amp;gt;&lt;/span&gt;&lt;span style="color: #000000;"&gt;
            &lt;/span&gt;&lt;span style="color: #0000FF;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #800000;"&gt;Grid.RowDefinitions&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color: #000000;"&gt;

            &lt;/span&gt;&lt;span style="color: #0000FF;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000;"&gt;ContentPresenter &lt;/span&gt;&lt;span style="color: #FF0000;"&gt;Grid.Row&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;="0"&lt;/span&gt;&lt;span style="color: #FF0000;"&gt; Content&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;="&lt;/span&gt;&lt;span style="color: #808000;"&gt;{Binding SearchForm}&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;"&lt;/span&gt;&lt;span style="color: #FF0000;"&gt; &lt;/span&gt;&lt;span style="color: #0000FF;"&gt;/&amp;gt;&lt;/span&gt;&lt;span style="color: #000000;"&gt;

            &lt;/span&gt;&lt;span style="color: #0000FF;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000;"&gt;ListView &lt;/span&gt;&lt;span style="color: #FF0000;"&gt;Grid.Row&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;="1"&lt;/span&gt;&lt;span style="color: #FF0000;"&gt; Name&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;="OrderList"&lt;/span&gt;&lt;span style="color: #FF0000;"&gt; DataContext&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;="&lt;/span&gt;&lt;span style="color: #808000;"&gt;{Binding Path=Orders}&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;"&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color: #000000;"&gt;
                &lt;/span&gt;&lt;span style="color: #0000FF;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000;"&gt;ListView.View&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color: #000000;"&gt;
                    &lt;/span&gt;&lt;span style="color: #0000FF;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000;"&gt;GridView&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color: #000000;"&gt;
                        ...
                    &lt;/span&gt;&lt;span style="color: #0000FF;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #800000;"&gt;GridView&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color: #000000;"&gt;
                &lt;/span&gt;&lt;span style="color: #0000FF;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #800000;"&gt;ListView.View&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color: #000000;"&gt;
            &lt;/span&gt;&lt;span style="color: #0000FF;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #800000;"&gt;ListView&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color: #000000;"&gt;

            &lt;/span&gt;&lt;span style="color: #0000FF;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000;"&gt;ContentPresenter &lt;/span&gt;&lt;span style="color: #FF0000;"&gt;Grid.Row&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;="2"&lt;/span&gt;&lt;span style="color: #FF0000;"&gt; Content&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;="&lt;/span&gt;&lt;span style="color: #808000;"&gt;{Binding Path=SelectedItem, ElementName=OrderList}&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;"&lt;/span&gt;&lt;span style="color: #FF0000;"&gt; &lt;/span&gt;&lt;span style="color: #0000FF;"&gt;/&amp;gt;&lt;/span&gt;&lt;span style="color: #000000;"&gt;
        &lt;/span&gt;&lt;span style="color: #0000FF;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #800000;"&gt;Grid&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color: #000000;"&gt;
    &lt;/span&gt;&lt;span style="color: #0000FF;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #800000;"&gt;DockPanel&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color: #000000;"&gt;
&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #800000;"&gt;UserControl&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p /&gt;

&lt;p&gt;In questo modo abbiamo creato un controllo che dispone i dati sulle tre righe della grid:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;visualizzerà sulla prima riga il SearchForm e lo rappresenterà con il DataTemplate relativo &lt;/li&gt;

  &lt;li&gt;la stessa cosa farà per l'ultima riga che verrà visualizzata solo quando selezioniamo un ordine dalla lista &lt;/li&gt;

  &lt;li&gt;la ListView centrale invece provvederà a mostrare tutti gli ordini in una GridView: in questo caso il template viene definito in-line &lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Infine questo UserControl, che altro non è che la OrderListView, verrà associato a OrderListViewModel sempre tramite un DataTemplate e il giro ricomincia.&lt;/p&gt;

&lt;p&gt;Quali sono, a mio parere, i vantaggi di questa soluzione? In sostanza tre:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;Centralizzare l'associazione tra View e ViewModel, in modo da poterla modificare in un solo punto se necessario &lt;/li&gt;

  &lt;li&gt;La possibilità di legare strettamente il metodo di rappresentazione al tipo rappresentato: se nell'esempio di prima la lista di OrderViewModel contenesse istanze diverse, per esempio StockOrderViewModel e SalesOrderViewModel, rappresentate da View diverse, il ContentPresenter verrebbe rappresentanto sempre con la View corretta senza dover fare nessuna modifica al codice XAML&lt;/li&gt;

  &lt;li&gt;La possibilità di rendere condizionale la scelta del DataTemplate (questo punto lo discuterò in un prossimo post) &lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt; &lt;/p&gt;

&lt;p&gt;Matteo&lt;/p&gt;

&lt;p&gt; &lt;/p&gt;

&lt;div class="wlWriterSmartContent" id="scid:0767317B-992E-4b12-91E0-4F059A8CECA8:aa174a23-8238-4369-b8ab-50db2b684239" style="padding-right: 0px; display: inline; padding-left: 0px; padding-bottom: 0px; margin: 0px; padding-top: 0px"&gt;Technorati Tag: &lt;a href="http://technorati.com/tags/WPF" rel="tag"&gt;WPF&lt;/a&gt;,&lt;a href="http://technorati.com/tags/XAML" rel="tag"&gt;XAML&lt;/a&gt;,&lt;a href="http://technorati.com/tags/MVVM" rel="tag"&gt;MVVM&lt;/a&gt;,&lt;a href="http://technorati.com/tags/DataTemplate" rel="tag"&gt;DataTemplate&lt;/a&gt;&lt;/div&gt;&lt;img src="http://blogs.ugidotnet.org/NExTLife/aggbug/95511.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Foffo</dc:creator>
            <guid>http://blogs.ugidotnet.org/NExTLife/archive/2009/02/19/wpf-in-salsa-mvvm-e-i-template.aspx</guid>
            <pubDate>Thu, 19 Feb 2009 15:43:00 GMT</pubDate>
            <comments>http://blogs.ugidotnet.org/NExTLife/archive/2009/02/19/wpf-in-salsa-mvvm-e-i-template.aspx#feedback</comments>
            <slash:comments>38</slash:comments>
            <wfw:commentRss>http://blogs.ugidotnet.org/NExTLife/comments/commentRss/95511.aspx</wfw:commentRss>
            <trackback:ping>http://blogs.ugidotnet.org/NExTLife/services/trackbacks/95511.aspx</trackback:ping>
        </item>
        <item>
            <title>WPF DataGrid e aggiunta di righe ad ItemSource</title>
            <category>Tips</category>
            <category>WPF</category>
            <category>Xaml</category>
            <link>http://blogs.ugidotnet.org/NExTLife/archive/2009/02/16/wpf-datagrid-e-aggiunta-di-righe-ad-itemsource.aspx</link>
            <description>&lt;p&gt;Un piccolo tip per mostrare una riga di aggiunta elemento nella DataGrid del WPF Control Toolkit.&lt;/p&gt;  &lt;p&gt;Ho una DataGrid il cui ItemSource è bindato ad una proprietà di tipo ObservableCollection&amp;lt;MioTipo&amp;gt;; inoltre la proprietà CanUserAddRows è impostata a True. Qualcosa di questo tipo insomma:&lt;/p&gt;  &lt;p&gt;   &lt;/p&gt;&lt;div class="wlWriterSmartContent" id="scid:F2210F5F-69EB-4d4c-AFF7-B8A050E9CC72:527c73e9-fefd-4567-9901-bf54a21fcd16" style="padding-right: 0px; display: inline; padding-left: 0px; float: none; padding-bottom: 0px; margin: 0px; padding-top: 0px"&gt;&lt;pre style="width:100%;;"&gt;&lt;div&gt;&lt;!--

Code highlighting produced by Actipro CodeHighlighter (freeware)
http://www.CodeHighlighter.com/

--&gt;&lt;span style="color: #000000;"&gt;    &lt;/span&gt;&lt;span style="color: #0000FF;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000;"&gt;ToolKit:DataGrid &lt;/span&gt;&lt;span style="color: #FF0000;"&gt;AutoGenerateColumns&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;="False"&lt;/span&gt;&lt;span style="color: #FF0000;"&gt; CanUserAddRows&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;="True"&lt;/span&gt;&lt;span style="color: #FF0000;"&gt;
        CanUserSortColumns&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;="True"&lt;/span&gt;&lt;span style="color: #FF0000;"&gt; Margin&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;="5,5,5,5"&lt;/span&gt;&lt;span style="color: #FF0000;"&gt; Name&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;="Items"&lt;/span&gt;&lt;span style="color: #FF0000;"&gt; ItemsSource&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;="&lt;/span&gt;&lt;span style="color: #808000;"&gt;{Binding Path=OrderItems}&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;"&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color: #000000;"&gt;
        &lt;/span&gt;&lt;span style="color: #0000FF;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000;"&gt;ToolKit:DataGrid.Columns&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color: #000000;"&gt;
            ...
        &lt;/span&gt;&lt;span style="color: #0000FF;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #800000;"&gt;ToolKit:DataGrid.Columns&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color: #000000;"&gt;
    &lt;/span&gt;&lt;span style="color: #0000FF;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #800000;"&gt;ToolKit:DataGrid&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;/pre&gt;&lt;/div&gt;


&lt;p&gt;Ebbene la riga di aggiunta Item non veniva visualizzata sulla DataGrid. L'errore, come solito, era mio: in MioTipo avevo definito un costruttore con un parametro, mentre il motore di binding della DataGrid richiede che il tipo degli Item esponga anche il costruttore senza parametri, cosa abbastanza scontata. Ho aggiunto quindi il costruttore base e tutto ha cominciato a funzionare come previsto.&lt;/p&gt;

&lt;p&gt; &lt;/p&gt;

&lt;p&gt;Matteo&lt;/p&gt;

&lt;p&gt; &lt;/p&gt;

&lt;div class="wlWriterSmartContent" id="scid:0767317B-992E-4b12-91E0-4F059A8CECA8:e848a5f9-f7a4-411d-9019-36c830458c88" style="padding-right: 0px; display: inline; padding-left: 0px; padding-bottom: 0px; margin: 0px; padding-top: 0px"&gt;Technorati Tag: &lt;a href="http://technorati.com/tags/WPF" rel="tag"&gt;WPF&lt;/a&gt;,&lt;a href="http://technorati.com/tags/ObservableCollection" rel="tag"&gt;ObservableCollection&lt;/a&gt;,&lt;a href="http://technorati.com/tags/Binding" rel="tag"&gt;Binding&lt;/a&gt;,&lt;a href="http://technorati.com/tags/DataGrid" rel="tag"&gt;DataGrid&lt;/a&gt;,&lt;a href="http://technorati.com/tags/WPF%20ToolKit" rel="tag"&gt;WPF ToolKit&lt;/a&gt;&lt;/div&gt;&lt;img src="http://blogs.ugidotnet.org/NExTLife/aggbug/95485.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Foffo</dc:creator>
            <guid>http://blogs.ugidotnet.org/NExTLife/archive/2009/02/16/wpf-datagrid-e-aggiunta-di-righe-ad-itemsource.aspx</guid>
            <pubDate>Mon, 16 Feb 2009 14:02:11 GMT</pubDate>
            <comments>http://blogs.ugidotnet.org/NExTLife/archive/2009/02/16/wpf-datagrid-e-aggiunta-di-righe-ad-itemsource.aspx#feedback</comments>
            <slash:comments>16</slash:comments>
            <wfw:commentRss>http://blogs.ugidotnet.org/NExTLife/comments/commentRss/95485.aspx</wfw:commentRss>
            <trackback:ping>http://blogs.ugidotnet.org/NExTLife/services/trackbacks/95485.aspx</trackback:ping>
        </item>
        <item>
            <title>XmlSerializer e serializzazione personalizzata</title>
            <category>C#</category>
            <category>Tips</category>
            <link>http://blogs.ugidotnet.org/NExTLife/archive/2009/02/14/xmlserializer-e-serializzazione-personalizzata.aspx</link>
            <description>&lt;p&gt;Personalizzare l'XML prodotto dalla serializzazione di una classe con XmlSerialization è motlo semplice; è sufficiente infatti far implementare alle classi coinvolte nella serializzazione l'interfaccia IXmlSerializer. &lt;/p&gt;  &lt;p&gt;Voglio mostrarvi un esempio: ho avuto la necessità di serializzare una classe che conteneva alcune liste di altre classi; il documento prodotto non doveva raggruppare le varie liste in nodi che rappresentavano le proprietà, ma elencare tutte le istanze sotto il nodo radice.&lt;/p&gt;  &lt;p&gt;La classi di esempio:&lt;/p&gt;  &lt;p /&gt;  &lt;div class="wlWriterSmartContent" id="scid:F2210F5F-69EB-4d4c-AFF7-B8A050E9CC72:f3e1cc50-c4cf-4da8-b6b3-b79c5780d6e1" style="padding-right: 0px; display: inline; padding-left: 0px; float: none; padding-bottom: 0px; margin: 0px; padding-top: 0px"&gt;&lt;pre style="width:100%;;"&gt;&lt;div&gt;&lt;!--

Code highlighting produced by Actipro CodeHighlighter (freeware)
http://www.CodeHighlighter.com/

--&gt;&lt;span style="color: #000000;"&gt;    &lt;/span&gt;&lt;span style="color: #0000FF;"&gt;public&lt;/span&gt;&lt;span style="color: #000000;"&gt; &lt;/span&gt;&lt;span style="color: #0000FF;"&gt;class&lt;/span&gt;&lt;span style="color: #000000;"&gt; InterfaceIn : IXmlSerializable
    {
        &lt;/span&gt;&lt;span style="color: #0000FF;"&gt;public&lt;/span&gt;&lt;span style="color: #000000;"&gt; List&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #000000;"&gt;Field&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color: #000000;"&gt; Fields { &lt;/span&gt;&lt;span style="color: #0000FF;"&gt;get&lt;/span&gt;&lt;span style="color: #000000;"&gt;; &lt;/span&gt;&lt;span style="color: #0000FF;"&gt;set&lt;/span&gt;&lt;span style="color: #000000;"&gt;; }

        &lt;/span&gt;&lt;span style="color: #0000FF;"&gt;public&lt;/span&gt;&lt;span style="color: #000000;"&gt; List&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #000000;"&gt;Constant&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color: #000000;"&gt; Constants { &lt;/span&gt;&lt;span style="color: #0000FF;"&gt;get&lt;/span&gt;&lt;span style="color: #000000;"&gt;; &lt;/span&gt;&lt;span style="color: #0000FF;"&gt;set&lt;/span&gt;&lt;span style="color: #000000;"&gt;; }

        ...
    }&lt;/span&gt;&lt;/div&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p /&gt;

&lt;p&gt;XML che dovrebbe essere prodotto:&lt;/p&gt;

&lt;p /&gt;

&lt;div class="wlWriterSmartContent" id="scid:F2210F5F-69EB-4d4c-AFF7-B8A050E9CC72:22d34668-4b6f-415c-9231-199ef2a02317" style="padding-right: 0px; display: inline; padding-left: 0px; float: none; padding-bottom: 0px; margin: 0px; padding-top: 0px"&gt;&lt;pre style="width:100%;;"&gt;&lt;div&gt;&lt;!--

Code highlighting produced by Actipro CodeHighlighter (freeware)
http://www.CodeHighlighter.com/

--&gt;&lt;span style="color: #000000;"&gt;    &lt;/span&gt;&lt;span style="color: #0000FF;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000;"&gt;INTERFACEIN&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color: #000000;"&gt;
      &lt;/span&gt;&lt;span style="color: #0000FF;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000;"&gt;CONSTANT &lt;/span&gt;&lt;span style="color: #FF0000;"&gt;DESTINATION&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;="COMMIT_FLAG"&lt;/span&gt;&lt;span style="color: #FF0000;"&gt; VALUE&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;="X"&lt;/span&gt;&lt;span style="color: #FF0000;"&gt; &lt;/span&gt;&lt;span style="color: #0000FF;"&gt;/&amp;gt;&lt;/span&gt;&lt;span style="color: #000000;"&gt; 
      &lt;/span&gt;&lt;span style="color: #0000FF;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000;"&gt;CONSTANT &lt;/span&gt;&lt;span style="color: #FF0000;"&gt;DESTINATION&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;="SAVE_FLAG"&lt;/span&gt;&lt;span style="color: #FF0000;"&gt; VALUE&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;="X"&lt;/span&gt;&lt;span style="color: #FF0000;"&gt; &lt;/span&gt;&lt;span style="color: #0000FF;"&gt;/&amp;gt;&lt;/span&gt;&lt;span style="color: #000000;"&gt; 
      &lt;/span&gt;&lt;span style="color: #0000FF;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000;"&gt;FIELD &lt;/span&gt;&lt;span style="color: #FF0000;"&gt;NAME&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;="DOC_NUMBER"&lt;/span&gt;&lt;span style="color: #FF0000;"&gt; DESTINATION&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;="DOKNR"&lt;/span&gt;&lt;span style="color: #FF0000;"&gt; &lt;/span&gt;&lt;span style="color: #0000FF;"&gt;/&amp;gt;&lt;/span&gt;&lt;span style="color: #000000;"&gt; 
      &lt;/span&gt;&lt;span style="color: #0000FF;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000;"&gt;FIELD &lt;/span&gt;&lt;span style="color: #FF0000;"&gt;NAME&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;="DOC_PART"&lt;/span&gt;&lt;span style="color: #FF0000;"&gt; DESTINATION&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;="DOKTL"&lt;/span&gt;&lt;span style="color: #FF0000;"&gt; &lt;/span&gt;&lt;span style="color: #0000FF;"&gt;/&amp;gt;&lt;/span&gt;&lt;span style="color: #000000;"&gt; 
    &lt;/span&gt;&lt;span style="color: #0000FF;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #800000;"&gt;INTERFACEIN&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p /&gt;

&lt;p&gt;E uno stralcio di implementazione dell'interfaccia IXmlSerailizable delle classi coinvolte:&lt;/p&gt;

&lt;p&gt;Esempio di deserializzazione di InterfaceIn&lt;/p&gt;

&lt;div class="wlWriterSmartContent" id="scid:F2210F5F-69EB-4d4c-AFF7-B8A050E9CC72:e774a9b9-9864-41a1-8528-70a61845dfa4" style="padding-right: 0px; display: inline; padding-left: 0px; float: none; padding-bottom: 0px; margin: 0px; padding-top: 0px"&gt;&lt;pre style="width:100%;;"&gt;&lt;div&gt;&lt;!--

Code highlighting produced by Actipro CodeHighlighter (freeware)
http://www.CodeHighlighter.com/

--&gt;&lt;span style="color: #000000;"&gt;    &lt;/span&gt;&lt;span style="color: #0000FF;"&gt;public&lt;/span&gt;&lt;span style="color: #000000;"&gt; &lt;/span&gt;&lt;span style="color: #0000FF;"&gt;void&lt;/span&gt;&lt;span style="color: #000000;"&gt; ReadXml(System.Xml.XmlReader reader)
    {
        reader.Read();
        &lt;/span&gt;&lt;span style="color: #0000FF;"&gt;while&lt;/span&gt;&lt;span style="color: #000000;"&gt; (&lt;/span&gt;&lt;span style="color: #000000;"&gt;!&lt;/span&gt;&lt;span style="color: #000000;"&gt;reader.EOF)
        {
            &lt;/span&gt;&lt;span style="color: #0000FF;"&gt;if&lt;/span&gt;&lt;span style="color: #000000;"&gt; (reader.IsStartElement())
            {
                &lt;/span&gt;&lt;span style="color: #0000FF;"&gt;switch&lt;/span&gt;&lt;span style="color: #000000;"&gt; (reader.Name)
                {
                    &lt;/span&gt;&lt;span style="color: #0000FF;"&gt;case&lt;/span&gt;&lt;span style="color: #000000;"&gt; &lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;FIELD&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #000000;"&gt;:
                        var f &lt;/span&gt;&lt;span style="color: #000000;"&gt;=&lt;/span&gt;&lt;span style="color: #000000;"&gt; &lt;/span&gt;&lt;span style="color: #0000FF;"&gt;new&lt;/span&gt;&lt;span style="color: #000000;"&gt; Field();
                        f.ReadXml(reader);
                        &lt;/span&gt;&lt;span style="color: #0000FF;"&gt;this&lt;/span&gt;&lt;span style="color: #000000;"&gt;.Fields.Add(f);
                        &lt;/span&gt;&lt;span style="color: #0000FF;"&gt;break&lt;/span&gt;&lt;span style="color: #000000;"&gt;;
                    &lt;/span&gt;&lt;span style="color: #0000FF;"&gt;case&lt;/span&gt;&lt;span style="color: #000000;"&gt; &lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;CONSTANT&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #000000;"&gt;:
                        var c &lt;/span&gt;&lt;span style="color: #000000;"&gt;=&lt;/span&gt;&lt;span style="color: #000000;"&gt; &lt;/span&gt;&lt;span style="color: #0000FF;"&gt;new&lt;/span&gt;&lt;span style="color: #000000;"&gt; Constant();
                        c.ReadXml(reader);
                        &lt;/span&gt;&lt;span style="color: #0000FF;"&gt;this&lt;/span&gt;&lt;span style="color: #000000;"&gt;.Constants.Add(c);
                        &lt;/span&gt;&lt;span style="color: #0000FF;"&gt;break&lt;/span&gt;&lt;span style="color: #000000;"&gt;;
                }
            }
            reader.Read();
        }
    }&lt;/span&gt;&lt;/div&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;Esempio di serializzazione di InterfaceIn&lt;/p&gt;

&lt;p&gt;
  &lt;/p&gt;&lt;div class="wlWriterSmartContent" id="scid:F2210F5F-69EB-4d4c-AFF7-B8A050E9CC72:8f3b40b1-0e48-4ed0-a51b-93d67f7e4cc9" style="padding-right: 0px; display: inline; padding-left: 0px; float: none; padding-bottom: 0px; margin: 0px; padding-top: 0px"&gt;&lt;pre style="width:100%;;"&gt;&lt;div&gt;&lt;!--

Code highlighting produced by Actipro CodeHighlighter (freeware)
http://www.CodeHighlighter.com/

--&gt;&lt;span style="color: #000000;"&gt;    &lt;/span&gt;&lt;span style="color: #0000FF;"&gt;public&lt;/span&gt;&lt;span style="color: #000000;"&gt; &lt;/span&gt;&lt;span style="color: #0000FF;"&gt;void&lt;/span&gt;&lt;span style="color: #000000;"&gt; WriteXml(System.Xml.XmlWriter writer)
    {
        &lt;/span&gt;&lt;span style="color: #0000FF;"&gt;foreach&lt;/span&gt;&lt;span style="color: #000000;"&gt; (var f &lt;/span&gt;&lt;span style="color: #0000FF;"&gt;in&lt;/span&gt;&lt;span style="color: #000000;"&gt; &lt;/span&gt;&lt;span style="color: #0000FF;"&gt;this&lt;/span&gt;&lt;span style="color: #000000;"&gt;.Fields)
            f.WriteXml(writer);

        &lt;/span&gt;&lt;span style="color: #0000FF;"&gt;foreach&lt;/span&gt;&lt;span style="color: #000000;"&gt; (var c &lt;/span&gt;&lt;span style="color: #0000FF;"&gt;in&lt;/span&gt;&lt;span style="color: #000000;"&gt; &lt;/span&gt;&lt;span style="color: #0000FF;"&gt;this&lt;/span&gt;&lt;span style="color: #000000;"&gt;.Costants)
            c.WriteXml(writer);
    }&lt;/span&gt;&lt;/div&gt;&lt;/pre&gt;&lt;/div&gt;


&lt;p&gt;Esempio di serializzazione di Field:&lt;/p&gt;

&lt;div class="wlWriterSmartContent" id="scid:F2210F5F-69EB-4d4c-AFF7-B8A050E9CC72:9ca71369-1035-4f3c-af69-586576aa2c35" style="padding-right: 0px; display: inline; padding-left: 0px; float: none; padding-bottom: 0px; margin: 0px; padding-top: 0px"&gt;&lt;pre style="width:100%;;"&gt;&lt;div&gt;&lt;!--

Code highlighting produced by Actipro CodeHighlighter (freeware)
http://www.CodeHighlighter.com/

--&gt;&lt;span style="color: #000000;"&gt;    &lt;/span&gt;&lt;span style="color: #0000FF;"&gt;public&lt;/span&gt;&lt;span style="color: #000000;"&gt; &lt;/span&gt;&lt;span style="color: #0000FF;"&gt;void&lt;/span&gt;&lt;span style="color: #000000;"&gt; WriteXml(System.Xml.XmlWriter writer)
    {
        writer.WriteStartElement(&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;FIELD&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #000000;"&gt;);
        writer.WriteAttributeString(&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;NAME&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #000000;"&gt;, &lt;/span&gt;&lt;span style="color: #0000FF;"&gt;this&lt;/span&gt;&lt;span style="color: #000000;"&gt;.Name);
        writer.WriteAttributeString(&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;DESTINATION&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #000000;"&gt;, &lt;/span&gt;&lt;span style="color: #0000FF;"&gt;this&lt;/span&gt;&lt;span style="color: #000000;"&gt;.Destination);
        writer.WriteEndElement();
    }&lt;/span&gt;&lt;/div&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;In buona sostanza è sufficiente avere un po' di dimistischezza con l'uso degli Stream, per ottenere delle serializzazioni personalizzate.&lt;/p&gt;

&lt;p&gt; &lt;/p&gt;

&lt;p&gt;Matteo&lt;/p&gt;

&lt;p&gt; &lt;/p&gt;

&lt;div class="wlWriterSmartContent" id="scid:0767317B-992E-4b12-91E0-4F059A8CECA8:75aecb8f-93ce-459e-b7a1-266ed8cdce82" style="padding-right: 0px; display: inline; padding-left: 0px; padding-bottom: 0px; margin: 0px; padding-top: 0px"&gt;Technorati Tag: &lt;a href="http://technorati.com/tags/XmlSerialization" rel="tag"&gt;XmlSerialization&lt;/a&gt;,&lt;a href="http://technorati.com/tags/Stream" rel="tag"&gt;Stream&lt;/a&gt;,&lt;a href="http://technorati.com/tags/C#" rel="tag"&gt;C#&lt;/a&gt;&lt;/div&gt;&lt;img src="http://blogs.ugidotnet.org/NExTLife/aggbug/95474.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Foffo</dc:creator>
            <guid>http://blogs.ugidotnet.org/NExTLife/archive/2009/02/14/xmlserializer-e-serializzazione-personalizzata.aspx</guid>
            <pubDate>Sat, 14 Feb 2009 16:37:54 GMT</pubDate>
            <comments>http://blogs.ugidotnet.org/NExTLife/archive/2009/02/14/xmlserializer-e-serializzazione-personalizzata.aspx#feedback</comments>
            <slash:comments>24</slash:comments>
            <wfw:commentRss>http://blogs.ugidotnet.org/NExTLife/comments/commentRss/95474.aspx</wfw:commentRss>
            <trackback:ping>http://blogs.ugidotnet.org/NExTLife/services/trackbacks/95474.aspx</trackback:ping>
        </item>
        <item>
            <title>Aprire un file col programma predefinito</title>
            <category>C#</category>
            <category>Tips</category>
            <link>http://blogs.ugidotnet.org/NExTLife/archive/2009/02/13/aprire-un-file-col-programma-predefinito.aspx</link>
            <description>&lt;p&gt;Ecco un piccolo tip per aprire un file in c#, in modo del tutto analogo alla cara vecchia ShellExecute&lt;/p&gt;  &lt;p /&gt;  &lt;div class="wlWriterSmartContent" id="scid:F2210F5F-69EB-4d4c-AFF7-B8A050E9CC72:0db65187-5230-431c-a807-ff02cb068744" style="padding-right: 0px; display: inline; padding-left: 0px; float: none; padding-bottom: 0px; margin: 0px; padding-top: 0px"&gt;&lt;pre style="width:100%;;"&gt;&lt;div&gt;&lt;!--

Code highlighting produced by Actipro CodeHighlighter (freeware)
http://www.CodeHighlighter.com/

--&gt;&lt;span style="color: #000000;"&gt;    System.Diagnostics.Process proc &lt;/span&gt;&lt;span style="color: #000000;"&gt;=&lt;/span&gt;&lt;span style="color: #000000;"&gt; &lt;/span&gt;&lt;span style="color: #0000FF;"&gt;new&lt;/span&gt;&lt;span style="color: #000000;"&gt; System.Diagnostics.Process();
    proc.StartInfo.FileName &lt;/span&gt;&lt;span style="color: #000000;"&gt;=&lt;/span&gt;&lt;span style="color: #000000;"&gt; path;
    proc.StartInfo.UseShellExecute &lt;/span&gt;&lt;span style="color: #000000;"&gt;=&lt;/span&gt;&lt;span style="color: #000000;"&gt; &lt;/span&gt;&lt;span style="color: #0000FF;"&gt;true&lt;/span&gt;&lt;span style="color: #000000;"&gt;;
    proc.Start();&lt;/span&gt;&lt;/div&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p /&gt;

&lt;p&gt;Non so se sia l'unico modo; sicuramente è un modo semplice ed efficace&lt;/p&gt;

&lt;p&gt; &lt;/p&gt;

&lt;p&gt;Matteo&lt;/p&gt;

&lt;p&gt; &lt;/p&gt;

&lt;div class="wlWriterSmartContent" id="scid:0767317B-992E-4b12-91E0-4F059A8CECA8:fe9a2dcc-b11e-4e57-9d3b-d9629cc2a666" style="padding-right: 0px; display: inline; padding-left: 0px; padding-bottom: 0px; margin: 0px; padding-top: 0px"&gt;Technorati Tag: &lt;a href="http://technorati.com/tags/ShellExecute" rel="tag"&gt;ShellExecute&lt;/a&gt;&lt;/div&gt;&lt;img src="http://blogs.ugidotnet.org/NExTLife/aggbug/95468.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Foffo</dc:creator>
            <guid>http://blogs.ugidotnet.org/NExTLife/archive/2009/02/13/aprire-un-file-col-programma-predefinito.aspx</guid>
            <pubDate>Fri, 13 Feb 2009 17:43:01 GMT</pubDate>
            <comments>http://blogs.ugidotnet.org/NExTLife/archive/2009/02/13/aprire-un-file-col-programma-predefinito.aspx#feedback</comments>
            <slash:comments>36</slash:comments>
            <wfw:commentRss>http://blogs.ugidotnet.org/NExTLife/comments/commentRss/95468.aspx</wfw:commentRss>
            <trackback:ping>http://blogs.ugidotnet.org/NExTLife/services/trackbacks/95468.aspx</trackback:ping>
        </item>
        <item>
            <title>SqlServer Compact 32 bit in ambiente a 64 bit</title>
            <category>C#</category>
            <category>Sql Server</category>
            <category>Tips</category>
            <link>http://blogs.ugidotnet.org/NExTLife/archive/2009/02/13/sqlserver-compact-32-bit-in-ambiente-a-64-bit.aspx</link>
            <description>&lt;p&gt;Se vi capita di usare Visual Studio 2008 su una macchina con, ad esempio, un Windows Vista a 64 bit per creare una applicazione con SqlServer Compact a 32 bit, potreste imbattervi in un errore col seguente messaggio:&lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;...Could not load file or assembly or one of its dependencies. An attempt was made to load a program with an incorrect format...&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;A me è successo e ci ho messo un po a capire che era colpa della mia disattenzione.&lt;/p&gt;  &lt;p&gt;Le soluzioni sono due: &lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;la prima è che se vi serve usare il SqlCompact a 32 bit si deve fare attenzione alla piattaforma di destinazione in fase di compilazione; non va più bene AnyCPU ma va cambiata ad x86.&lt;/li&gt;    &lt;li&gt;la seconda è quella di usare SqlCompact a 64 bit&lt;/li&gt; &lt;/ul&gt;  &lt;p&gt; &lt;/p&gt;  &lt;p&gt; &lt;/p&gt;  &lt;p&gt;Matteo&lt;/p&gt;  &lt;p&gt; &lt;/p&gt;  &lt;p&gt;   &lt;/p&gt;&lt;div class="wlWriterSmartContent" id="scid:0767317B-992E-4b12-91E0-4F059A8CECA8:05c8139a-7504-4c8f-85bf-a58268ac306b" style="padding-right: 0px; display: inline; padding-left: 0px; padding-bottom: 0px; margin: 0px; padding-top: 0px"&gt;Technorati Tag: &lt;a href="http://technorati.com/tags/Sql%20Server%20Compact%203.5" rel="tag"&gt;Sql Server Compact 3.5&lt;/a&gt;,&lt;a href="http://technorati.com/tags/x64" rel="tag"&gt;x64&lt;/a&gt;&lt;/div&gt;&lt;img src="http://blogs.ugidotnet.org/NExTLife/aggbug/95464.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Foffo</dc:creator>
            <guid>http://blogs.ugidotnet.org/NExTLife/archive/2009/02/13/sqlserver-compact-32-bit-in-ambiente-a-64-bit.aspx</guid>
            <pubDate>Fri, 13 Feb 2009 15:03:30 GMT</pubDate>
            <comments>http://blogs.ugidotnet.org/NExTLife/archive/2009/02/13/sqlserver-compact-32-bit-in-ambiente-a-64-bit.aspx#feedback</comments>
            <slash:comments>37</slash:comments>
            <wfw:commentRss>http://blogs.ugidotnet.org/NExTLife/comments/commentRss/95464.aspx</wfw:commentRss>
            <trackback:ping>http://blogs.ugidotnet.org/NExTLife/services/trackbacks/95464.aspx</trackback:ping>
        </item>
        <item>
            <title>Routed Event e TreeView</title>
            <category>C#</category>
            <category>Tips</category>
            <category>WPF</category>
            <link>http://blogs.ugidotnet.org/NExTLife/archive/2009/02/09/routed-event-e-treeview.aspx</link>
            <description>&lt;p&gt;I Routed Event sono stati introdotti con l'avvento di WPF; molto in sintesi, sono eventi che vengono propagati lungo tutto l'albero di controlli della nostra Window, ammettendo quindi gestori multipli: per esempio se abbiamo uno StackPanel con dentro un Button con dentro una Image, l'evento click generato dal click del mouse sulla Image verrà propagato anche al Button e in seguito allo StackPanel. &lt;a href="http://msdn.microsoft.com/en-us/library/ms742806.aspx#routing" target="_blank"&gt;Qui&lt;/a&gt; potrete trovare maggiori info.&lt;/p&gt;  &lt;p&gt;Di seguito invece un piccolo tip per l'uso delle TreeView. Ho implementato un piccolo programmino che prevede la rappresentazione di dati in un albero e la gestione del Drag and Drop. A questo scopo ogni TreeViewItem ha associato all'evento Drop un delegato (lo stesso per ogni item). Il problema, se tale si può definire, è dato dal fatto che essendo &lt;em&gt;Drop&lt;/em&gt; un Routed Event, ogni qualvolta l'utente rilascia (o meglio "Droppa" :) ), qualcosa sul TreeViewItem desiderato, la gestione viene propagata a di Parent in Parent sino alla radice, eseguendo quindi N volte lo stesso metodo. Evitare questo comportamento è semplice: RoutedEventArgs espone una proprietà booleana Handled, che permette di interrompere la propagazione dell'evento agli altri gestori. Essendo quindi il gestore designato nella mia soluzione il destinatario del Drop mi è bastato impostare Handled a true all'interno del delegato:&lt;/p&gt;  &lt;p&gt;   &lt;/p&gt;&lt;div class="wlWriterSmartContent" id="scid:F2210F5F-69EB-4d4c-AFF7-B8A050E9CC72:2fa57d35-bb53-4a3c-b4fc-927d53de50b0" style="padding-right: 0px; display: inline; padding-left: 0px; float: none; padding-bottom: 0px; margin: 0px; padding-top: 0px"&gt;&lt;pre style="width:100%;;"&gt;&lt;div&gt;&lt;!--

Code highlighting produced by Actipro CodeHighlighter (freeware)
http://www.CodeHighlighter.com/

--&gt;&lt;span style="color: #000000;"&gt;        &lt;/span&gt;&lt;span style="color: #0000FF;"&gt;void&lt;/span&gt;&lt;span style="color: #000000;"&gt; node_Drop(&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;object&lt;/span&gt;&lt;span style="color: #000000;"&gt; sender, System.Windows.DragEventArgs e)
        {  
            ...
            e.Handled &lt;/span&gt;&lt;span style="color: #000000;"&gt;=&lt;/span&gt;&lt;span style="color: #000000;"&gt; &lt;/span&gt;&lt;span style="color: #0000FF;"&gt;true&lt;/span&gt;&lt;span style="color: #000000;"&gt;;
        }&lt;/span&gt;&lt;/div&gt;&lt;/pre&gt;&lt;/div&gt;


&lt;p&gt; &lt;/p&gt;

&lt;p&gt;Interessanti questi Routed Event, ma se non li segui... :)&lt;/p&gt;

&lt;p&gt; &lt;/p&gt;

&lt;p&gt;Matteo&lt;/p&gt;

&lt;p&gt; &lt;/p&gt;

&lt;p&gt; &lt;/p&gt;

&lt;div class="wlWriterSmartContent" id="scid:0767317B-992E-4b12-91E0-4F059A8CECA8:d21467ec-30a4-4b51-a28e-76b7f45adbae" style="padding-right: 0px; display: inline; padding-left: 0px; padding-bottom: 0px; margin: 0px; padding-top: 0px"&gt;Technorati Tag: &lt;a href="http://technorati.com/tags/WPF" rel="tag"&gt;WPF&lt;/a&gt;,&lt;a href="http://technorati.com/tags/RoutedEvents" rel="tag"&gt;RoutedEvents&lt;/a&gt;,&lt;a href="http://technorati.com/tags/TreeView" rel="tag"&gt;TreeView&lt;/a&gt;&lt;/div&gt;&lt;img src="http://blogs.ugidotnet.org/NExTLife/aggbug/95424.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Foffo</dc:creator>
            <guid>http://blogs.ugidotnet.org/NExTLife/archive/2009/02/09/routed-event-e-treeview.aspx</guid>
            <pubDate>Mon, 09 Feb 2009 13:08:47 GMT</pubDate>
            <comments>http://blogs.ugidotnet.org/NExTLife/archive/2009/02/09/routed-event-e-treeview.aspx#feedback</comments>
            <slash:comments>21</slash:comments>
            <wfw:commentRss>http://blogs.ugidotnet.org/NExTLife/comments/commentRss/95424.aspx</wfw:commentRss>
            <trackback:ping>http://blogs.ugidotnet.org/NExTLife/services/trackbacks/95424.aspx</trackback:ping>
        </item>
    </channel>
</rss>