<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>WP7</title>
        <link>http://blogs.ugidotnet.org/martinobordin/category/WP7.aspx</link>
        <description>My adventures in the Windows Phone 7 world</description>
        <language>it</language>
        <copyright>Martino Bordin</copyright>
        <generator>Subtext Version 2.6.0.0</generator>
        <item>
            <title>Visualizzare il traffico dati WiFi di WP7 con Fiddler</title>
            <link>http://blogs.ugidotnet.org/martinobordin/archive/2011/09/07/visualizzare-il-traffico-dati-wifi-di-wp7-con-fiddler.aspx</link>
            <description>&lt;p&gt;In questi giorni (o meglio, notti) sto aggiornando la mia app &lt;a href="http://www.wp7worldcam.com/"&gt;WorldCam&lt;/a&gt; per WP7 all’ultima versione dei tools (Mango). Con l’occasione ho riscritto e ottimizzato parte del programma, soprattutto per quanto riguarda il download delle immagini. Per testare le modifiche effettuate, ho pensato  di utilizzare &lt;a href="http://www.fiddler2.com/fiddler2/"&gt;Fiddler&lt;/a&gt; per controllare il traffico dati.&lt;/p&gt;  &lt;p&gt;Per fare ciò ho seguito questa semplice procedura:&lt;/p&gt;  &lt;ol&gt;   &lt;li&gt;Lanciare Fiddler ed abilitare le connessioni remote su Options-&amp;gt; Connections. Eventualmente modificare la porta sulla quale Fiddler si metterà in ascolto.&lt;a href="http://blogs.ugidotnet.org/images/blogs_ugidotnet_org/martinobordin/Windows-Live-Writer/9c2b3aa677b8_DC8/image_2.png"&gt;&lt;img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="Impostazioni Fiddler" border="0" alt="Impostazioni Fiddler" src="http://blogs.ugidotnet.org/images/blogs_ugidotnet_org/martinobordin/Windows-Live-Writer/9c2b3aa677b8_DC8/image_thumb.png" width="644" height="432" /&gt;&lt;/a&gt; &lt;/li&gt;    &lt;li&gt;Sul device WP7, nelle impostazioni di rete, settare come Proxy l’indirizzo IP del PC sul quale è in esecuzione Fiddler e relativa la porta.&lt;a href="http://blogs.ugidotnet.org/images/blogs_ugidotnet_org/martinobordin/Windows-Live-Writer/9c2b3aa677b8_DC8/image_4.png"&gt;        &lt;br /&gt;&lt;img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="Impostazioni WP7" border="0" alt="Impostazioni WP7" src="http://blogs.ugidotnet.org/images/blogs_ugidotnet_org/martinobordin/Windows-Live-Writer/9c2b3aa677b8_DC8/image_thumb_1.png" width="312" height="484" /&gt;&lt;/a&gt; &lt;/li&gt;    &lt;li&gt;Navigate utlizzando il telefono e la connessione WiFi e vedrete il traffico dati su Fiddler:&lt;a href="http://blogs.ugidotnet.org/images/blogs_ugidotnet_org/martinobordin/Windows-Live-Writer/9c2b3aa677b8_DC8/Fiddler_2.png"&gt;        &lt;br /&gt;&lt;img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="Fiddler" border="0" alt="Fiddler" src="http://blogs.ugidotnet.org/images/blogs_ugidotnet_org/martinobordin/Windows-Live-Writer/9c2b3aa677b8_DC8/Fiddler_thumb.png" width="1028" height="550" /&gt;&lt;/a&gt; &lt;/li&gt; &lt;/ol&gt;  &lt;p&gt;Happy sniff!&lt;/p&gt;  &lt;p&gt;P.S: Ovviamente è possibile fare la stessa cosa anche per IPhone:&lt;/p&gt;  &lt;p&gt;&lt;a href="http://blogs.ugidotnet.org/images/blogs_ugidotnet_org/martinobordin/Windows-Live-Writer/9c2b3aa677b8_DC8/image_6.png"&gt;&lt;img style="background-image: none; border-bottom: 0px; border-left: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://blogs.ugidotnet.org/images/blogs_ugidotnet_org/martinobordin/Windows-Live-Writer/9c2b3aa677b8_DC8/image_thumb_2.png" width="324" height="484" /&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://blogs.ugidotnet.org/martinobordin/aggbug/100327.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Martino Bordin</dc:creator>
            <guid>http://blogs.ugidotnet.org/martinobordin/archive/2011/09/07/visualizzare-il-traffico-dati-wifi-di-wp7-con-fiddler.aspx</guid>
            <pubDate>Wed, 07 Sep 2011 11:13:44 GMT</pubDate>
            <comments>http://blogs.ugidotnet.org/martinobordin/archive/2011/09/07/visualizzare-il-traffico-dati-wifi-di-wp7-con-fiddler.aspx#feedback</comments>
            <slash:comments>2</slash:comments>
            <wfw:commentRss>http://blogs.ugidotnet.org/martinobordin/comments/commentRss/100327.aspx</wfw:commentRss>
            <trackback:ping>http://blogs.ugidotnet.org/martinobordin/services/trackbacks/100327.aspx</trackback:ping>
        </item>
        <item>
            <title>Blendability con Moq e NBuilder</title>
            <link>http://blogs.ugidotnet.org/martinobordin/archive/2011/08/09/blendability-con-moq-e-nbuilder.aspx</link>
            <description>&lt;p&gt;Che il vostro progetto sia sviluppato in WPF, Silverlight o Silverlight per WP7 un aspetto fondamentale (direi quasi un requisito non funzionale) da soddisfare è il supporto ai designer di Visual Studio/Blend, identificato con il termine “&lt;strong&gt;Blendability&lt;/strong&gt;”.&lt;/p&gt;  &lt;p&gt;Anche se può sembrare banale, in realtà la faccenda si complica man mano che i nostri ViewModel prendono forma e utilizziamo &lt;a href="http://en.wikipedia.org/wiki/Inversion_of_control"&gt;IoC&lt;/a&gt;.&lt;/p&gt;  &lt;p&gt;In soldoni il Designer non è in grado di rappresentare graficamente una View collegata ad un ViewModel di questo tipo:&lt;/p&gt;  &lt;div style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; float: none; padding-top: 0px" id="scid:9ce6104f-a9aa-4a17-a79f-3a39532ebf7c:44420792-6ca1-4224-80c3-b852409584a9" class="wlWriterEditableSmartContent"&gt; &lt;div style="border: #000080 1px solid; color: #000; font-family: 'Courier New', Courier, Monospace; font-size: 10pt"&gt; &lt;div style="background: #ddd; max-height: 300px; overflow: auto"&gt; &lt;ol style="background: #ffffff; margin: 0 0 0 2em; padding: 0 0 0 5px;"&gt; &lt;li&gt;&lt;span style="color:#0000ff"&gt;public&lt;/span&gt; MainViewModel(&lt;span style="color:#2b91af"&gt;IPersonService&lt;/span&gt; personService)&lt;/li&gt; &lt;li style="background: #f3f3f3"&gt;{&lt;/li&gt; &lt;li&gt;    People = &lt;span style="color:#0000ff"&gt;new&lt;/span&gt; &lt;span style="color:#2b91af"&gt;ObservableCollection&lt;/span&gt;&amp;lt;&lt;span style="color:#2b91af"&gt;Person&lt;/span&gt;&amp;gt;(personService.GetAll());&lt;/li&gt; &lt;li style="background: #f3f3f3"&gt; &lt;/li&gt; &lt;li&gt;    ShowPersonDetailCommand = &lt;span style="color:#0000ff"&gt;new&lt;/span&gt; &lt;span style="color:#2b91af"&gt;RelayCommand&lt;/span&gt;(PerformShowPersonDetail, CanShowPersonDetail);&lt;/li&gt; &lt;li style="background: #f3f3f3"&gt;}&lt;/li&gt; &lt;/ol&gt; &lt;/div&gt; &lt;/div&gt; &lt;/div&gt;  &lt;p&gt; &lt;/p&gt;  &lt;p&gt;Tra le soluzioni possibili troviamo:&lt;/p&gt;  &lt;ol&gt;   &lt;li&gt;utilizzare un ViewModelLocator che restituisce istanze diverse dei ViewModel se siamo a design-time o a run-time (es: &lt;a href="http://blog.roboblob.com/2010/01/17/wiring-up-view-and-viewmodel-in-mvvm-and-silverlight-4-blendability-included/"&gt;link&lt;/a&gt;) &lt;/li&gt;    &lt;li&gt;utilizzare ViewModel che si comportano in modo diverso se siamo a design-time o a run-time (es: &lt;a href="http://netindonesia.net/blogs/zeddy/archive/2011/06/23/wp7-intro-to-mvvm-amp-blendability-by-building-twitter-app-part-1.aspx"&gt;link&lt;/a&gt;) &lt;/li&gt;    &lt;li&gt;utilizzare file XAML in cui definire i dati fake (es: &lt;a href="http://karlshifflett.wordpress.com/2009/10/21/visual-studio-2010-beta2-sample-data-project-templates/"&gt;link&lt;/a&gt;) &lt;/li&gt; &lt;/ol&gt;  &lt;p&gt;Personalmente, anche se funzionanti, non mi piace nessuna delle soluzioni proposte in quanto:&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;vado ad inserire logica completamente estranea ai ViewModelLocator\ViewModel (punti 1, 2) &lt;/li&gt;    &lt;li&gt;mi ritrovo a manutenere file XAML satelliti che andranno ad appesantire il refactoring (punto 3) &lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;Da un po' di tempo a questa parte sto adottando la strategia che da il titolo a questo post: uso &lt;a href="http://code.google.com/p/moq/"&gt;Moq&lt;/a&gt; e &lt;a href="http://nbuilder.org/"&gt;NBuilder&lt;/a&gt;. &lt;/p&gt;  &lt;p&gt;Per chi non li conoscesse, sono 2 librerie che facilitano la scrittura di test automatici, essendo rispettivamente un framework di mocking e un tool per la generazione dinamica di oggetti. &lt;/p&gt;  &lt;p&gt;Nonostante siano strumenti nati per altri scopi, ho deciso di provarli per ottenere ViewModel “blendabili”.&lt;/p&gt;  &lt;p&gt;In pratica:&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;Vado a creare, possibilmente in un assembly a parte, un &lt;strong&gt;MainViewModelDesign  &lt;/strong&gt;che eredita dal &lt;strong&gt;MainViewModel&lt;/strong&gt; visto in precedenza. &lt;/li&gt; &lt;/ul&gt;  &lt;div style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; float: none; padding-top: 0px" id="scid:9ce6104f-a9aa-4a17-a79f-3a39532ebf7c:b566f2aa-c066-4b13-b9bb-97c7530acb5e" class="wlWriterEditableSmartContent"&gt; &lt;div style="border: #000080 1px solid; color: #000; font-family: 'Courier New', Courier, Monospace; font-size: 10pt"&gt; &lt;div style="background: #ddd; overflow: auto"&gt; &lt;ol style="background: #ffffff; margin: 0 0 0 2em; padding: 0 0 0 5px;"&gt; &lt;li&gt;&lt;span style="color:#0000ff"&gt;public&lt;/span&gt; &lt;span style="color:#0000ff"&gt;class&lt;/span&gt; &lt;span style="color:#2b91af"&gt;MainViewModelDesign&lt;/span&gt; : &lt;span style="color:#2b91af"&gt;MainViewModel&lt;/span&gt;&lt;/li&gt; &lt;li style="background: #f3f3f3"&gt;{&lt;/li&gt; &lt;li&gt;    &lt;span style="color:#0000ff"&gt;public&lt;/span&gt; MainViewModelDesign()&lt;/li&gt; &lt;li style="background: #f3f3f3"&gt;        : &lt;span style="color:#0000ff"&gt;base&lt;/span&gt;(&lt;span style="color:#ff0000"&gt;GetMockedService&lt;/span&gt;())&lt;/li&gt; &lt;li&gt;    {&lt;/li&gt; &lt;li style="background: #f3f3f3"&gt;    }&lt;/li&gt; &lt;li&gt;}&lt;/li&gt; &lt;/ol&gt; &lt;/div&gt; &lt;/div&gt; &lt;/div&gt;  &lt;ul&gt;   &lt;li&gt;Il Metodo &lt;strong&gt;GetMockedService&lt;/strong&gt; mi ritorna un &lt;strong&gt;mock&lt;/strong&gt; che implementa IPersonService e va a definire i metodi utilizzati dal ViewModel in questione. In questo caso ho instrumentato &lt;strong&gt;Moq&lt;/strong&gt; in maniera tale che, quando viene invocato il metodo &lt;strong&gt;GetAll&lt;/strong&gt;, mi restituisca, tramite la classe Builder di &lt;strong&gt;NBuilder&lt;/strong&gt;, un elenco di &lt;strong&gt;Person&lt;/strong&gt;. &lt;/li&gt; &lt;/ul&gt;  &lt;div style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; float: none; padding-top: 0px" id="scid:9ce6104f-a9aa-4a17-a79f-3a39532ebf7c:8c424d18-3eea-4015-bda3-f35129399cb7" class="wlWriterEditableSmartContent"&gt; &lt;div style="border: #000080 1px solid; color: #000; font-family: 'Courier New', Courier, Monospace; font-size: 10pt"&gt; &lt;div style="background: #ddd; max-height: 300px; overflow: auto"&gt; &lt;ol style="background: #ffffff; margin: 0 0 0 2.5em; padding: 0 0 0 5px;"&gt; &lt;li&gt;&lt;span style="color:#0000ff"&gt;private&lt;/span&gt; &lt;span style="color:#0000ff"&gt;static&lt;/span&gt; &lt;span style="color:#2b91af"&gt;IPersonService&lt;/span&gt; GetMockedService()&lt;/li&gt; &lt;li style="background: #f3f3f3"&gt;{&lt;/li&gt; &lt;li&gt;    &lt;span style="color:#0000ff"&gt;var&lt;/span&gt; mockedService = &lt;span style="color:#0000ff"&gt;new&lt;/span&gt; &lt;span style="color:#2b91af"&gt;Mock&lt;/span&gt;&amp;lt;&lt;span style="color:#2b91af"&gt;IPersonService&lt;/span&gt;&amp;gt;();&lt;/li&gt; &lt;li style="background: #f3f3f3"&gt;    mockedService&lt;/li&gt; &lt;li&gt;        .Setup(s =&amp;gt; s.GetAll())&lt;/li&gt; &lt;li style="background: #f3f3f3"&gt;        .Returns(&lt;span style="color:#2b91af"&gt;Builder&lt;/span&gt;&amp;lt;&lt;span style="color:#2b91af"&gt;Person&lt;/span&gt;&amp;gt;.CreateListOfSize(5).Build());&lt;/li&gt; &lt;li&gt; &lt;/li&gt; &lt;li style="background: #f3f3f3"&gt; &lt;/li&gt; &lt;li&gt;    &lt;span style="color:#0000ff"&gt;return&lt;/span&gt; mockedService.Object;&lt;/li&gt; &lt;li style="background: #f3f3f3"&gt;}&lt;/li&gt; &lt;/ol&gt; &lt;/div&gt; &lt;/div&gt; &lt;/div&gt;  &lt;ul&gt;   &lt;li&gt;Per collegare il nostro nuovo ViewModel useremo il Databinding e la proprietà d: DataContext, utilizzando la markup extension&lt;strong&gt; {d: DesignInstance}&lt;/strong&gt; (maggiori info &lt;a href="http://msdn.microsoft.com/en-us/library/dd490796%28VS.100%29.aspx"&gt;qui&lt;/a&gt;),  passando il nome del ViewModel che vogliamo venga creato automaticamente dal designer  (riga 12): &lt;/li&gt; &lt;/ul&gt;  &lt;div style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; float: none; padding-top: 0px" id="scid:9ce6104f-a9aa-4a17-a79f-3a39532ebf7c:8df8a9e7-f234-43e9-96c1-acba2f7d9ee6" class="wlWriterEditableSmartContent"&gt; &lt;div style="border: #000080 1px solid; color: #000; font-family: 'Courier New', Courier, Monospace; font-size: 10pt"&gt; &lt;div style="background: #ddd; max-height: 300px; overflow: auto"&gt; &lt;ol style="background: #ffffff; margin: 0 0 0 2.5em; padding: 0 0 0 5px;"&gt; &lt;li&gt;&lt;span style="color:#0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#a31515"&gt;Window&lt;/span&gt; &lt;/li&gt; &lt;li style="background: #f3f3f3"&gt;    &lt;span style="color:#ff0000"&gt;x&lt;/span&gt;&lt;span style="color:#0000ff"&gt;:&lt;/span&gt;&lt;span style="color:#ff0000"&gt;Class&lt;/span&gt;&lt;span style="color:#0000ff"&gt;="Blendability.Views.MainWindow"&lt;/span&gt;&lt;/li&gt; &lt;li&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;/li&gt; &lt;li style="background: #f3f3f3"&gt;   &lt;span style="color:#ff0000"&gt; xmlns&lt;/span&gt;&lt;span style="color:#0000ff"&gt;:&lt;/span&gt;&lt;span style="color:#ff0000"&gt;x&lt;/span&gt;&lt;span style="color:#0000ff"&gt;="http://schemas.microsoft.com/winfx/2006/xaml"&lt;/span&gt;&lt;/li&gt; &lt;li&gt;    &lt;span style="color:#ff0000"&gt;xmlns&lt;/span&gt;&lt;span style="color:#0000ff"&gt;:&lt;/span&gt;&lt;span style="color:#ff0000"&gt;d&lt;/span&gt;&lt;span style="color:#0000ff"&gt;="http://schemas.microsoft.com/expression/blend/2008"&lt;/span&gt; &lt;/li&gt; &lt;li style="background: #f3f3f3"&gt;    &lt;span style="color:#ff0000"&gt;xmlns&lt;/span&gt;&lt;span style="color:#0000ff"&gt;:&lt;/span&gt;&lt;span style="color:#ff0000"&gt;mc&lt;/span&gt;&lt;span style="color:#0000ff"&gt;="http://schemas.openxmlformats.org/markup-compatibility/2006"&lt;/span&gt;&lt;/li&gt; &lt;li&gt;    &lt;span style="color:#ff0000"&gt;xmlns&lt;/span&gt;&lt;span style="color:#0000ff"&gt;:&lt;/span&gt;&lt;span style="color:#ff0000"&gt;viewModels&lt;/span&gt;&lt;span style="color:#0000ff"&gt;="clr-namespace:Blendability.ViewModels.Design"&lt;/span&gt;&lt;/li&gt; &lt;li style="background: #f3f3f3"&gt;   &lt;span style="color:#ff0000"&gt; Title&lt;/span&gt;&lt;span style="color:#0000ff"&gt;="People"&lt;/span&gt; &lt;/li&gt; &lt;li&gt;    &lt;span style="color:#ff0000"&gt;Height&lt;/span&gt;&lt;span style="color:#0000ff"&gt;="350"&lt;/span&gt; &lt;/li&gt; &lt;li style="background: #f3f3f3"&gt;    &lt;span style="color:#ff0000"&gt;Width&lt;/span&gt;&lt;span style="color:#0000ff"&gt;="525"&lt;/span&gt;&lt;/li&gt; &lt;li&gt;    &lt;span style="color:#ff0000"&gt;mc&lt;/span&gt;&lt;span style="color:#0000ff"&gt;:&lt;/span&gt;&lt;span style="color:#ff0000"&gt;Ignorable&lt;/span&gt;&lt;span style="color:#0000ff"&gt;="d"&lt;/span&gt;&lt;/li&gt; &lt;li style="background: #f3f3f3"&gt;    &lt;span style="color:#ff0000"&gt;d&lt;/span&gt;&lt;span style="color:#0000ff"&gt;:&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:#a31515"&gt;d&lt;/span&gt;&lt;span style="color:#0000ff"&gt;:&lt;/span&gt;&lt;span style="color:#a31515"&gt;DesignInstance&lt;/span&gt;&lt;span style="color:#ff0000"&gt; viewModels&lt;/span&gt;&lt;span style="color:#0000ff"&gt;:&lt;/span&gt;&lt;span style="color:#ff0000"&gt;MainViewModelDesign&lt;/span&gt;&lt;span style="color:#0000ff"&gt;,&lt;/span&gt;&lt;span style="color:#ff0000"&gt; IsDesignTimeCreatable&lt;/span&gt;&lt;span style="color:#0000ff"&gt;=True}"&lt;/span&gt; &lt;/li&gt; &lt;li&gt;    &lt;span style="color:#ff0000"&gt;DataContext&lt;/span&gt;&lt;span style="color:#0000ff"&gt;="{&lt;/span&gt;&lt;span style="color:#a31515"&gt;Binding&lt;/span&gt;&lt;span style="color:#ff0000"&gt; Source&lt;/span&gt;&lt;span style="color:#0000ff"&gt;={&lt;/span&gt;&lt;span style="color:#a31515"&gt;StaticResource&lt;/span&gt;&lt;span style="color:#ff0000"&gt; locator}&lt;/span&gt;&lt;span style="color:#0000ff"&gt;,&lt;/span&gt;&lt;span style="color:#ff0000"&gt; Path&lt;/span&gt;&lt;span style="color:#0000ff"&gt;=MainViewModel}"&amp;gt;&lt;/span&gt;&lt;/li&gt; &lt;/ol&gt; &lt;/div&gt; &lt;/div&gt; &lt;/div&gt;  &lt;p&gt;Ovviamente possiamo ancora impostare la “solita” proprietà DataContext che verrà effettivamente utilizzata a runtime (riga 13).&lt;/p&gt;  &lt;p&gt;A questo punto se apro Visual Studio o Blend avrò pieno supporto del designer:&lt;/p&gt;  &lt;p&gt;&lt;a href="http://blogs.ugidotnet.org/images/blogs_ugidotnet_org/martinobordin/Windows-Live-Writer/Blendability_8158/image_2.png"&gt;&lt;img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://blogs.ugidotnet.org/images/blogs_ugidotnet_org/martinobordin/Windows-Live-Writer/Blendability_8158/image_thumb.png" width="416" height="371" /&gt;&lt;/a&gt;      &lt;a href="http://blogs.ugidotnet.org/images/blogs_ugidotnet_org/martinobordin/Windows-Live-Writer/Blendability_8158/image_4.png"&gt;&lt;img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://blogs.ugidotnet.org/images/blogs_ugidotnet_org/martinobordin/Windows-Live-Writer/Blendability_8158/image_thumb_1.png" width="335" height="365" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt; &lt;/p&gt;  &lt;p&gt;Riassumendo:&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;ho definito un ViewModel che eredita dal ViewModel reale, e si preoccupa solo di visualizzare i dati (e che andrò a mettere su un assembly a parte) ed eventuale logica di generazione dei dati fake (tra l’altro NBuilder è abbastanza versatile e posso definire regole del tipo “le prime 5 Person devono avere Name = “Nome123abc” e DateOfBirth = “01/02/2003”, le restanti Name = “blablabla") &lt;/li&gt;    &lt;li&gt;se farò refactoring non dovrò cambiare file XAML se non la View vera e propria &lt;/li&gt;    &lt;li&gt;ho il pieno supporto dei designer: editing di stili\template con preview instantanea, animazioni, property window, etc &lt;/li&gt;    &lt;li&gt;funziona per progetti WPF\ SL e WP7! &lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;Ho preparato un esempio un pò più articolato di quello illustrato che potete scaricare &lt;a href="http://goo.gl/hlyBb"&gt;qui&lt;/a&gt;. Ovviamente tutto quello che vedrete aprendo il designer NON lo vedrete a runtime &lt;img style="border-bottom-style: none; border-left-style: none; border-top-style: none; border-right-style: none" class="wlEmoticon wlEmoticon-openmouthedsmile" alt="A bocca aperta" src="http://blogs.ugidotnet.org/images/blogs_ugidotnet_org/martinobordin/Windows-Live-Writer/Blendability_8158/wlEmoticon-openmouthedsmile_2.png" /&gt;.&lt;/p&gt;  &lt;p&gt;Cosa ne pensate? Come ottenete la blendability di solito nei vostri progetti?&lt;/p&gt;&lt;img src="http://blogs.ugidotnet.org/martinobordin/aggbug/100261.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Martino Bordin</dc:creator>
            <guid>http://blogs.ugidotnet.org/martinobordin/archive/2011/08/09/blendability-con-moq-e-nbuilder.aspx</guid>
            <pubDate>Tue, 09 Aug 2011 15:59:27 GMT</pubDate>
            <comments>http://blogs.ugidotnet.org/martinobordin/archive/2011/08/09/blendability-con-moq-e-nbuilder.aspx#feedback</comments>
            <wfw:commentRss>http://blogs.ugidotnet.org/martinobordin/comments/commentRss/100261.aspx</wfw:commentRss>
            <trackback:ping>http://blogs.ugidotnet.org/martinobordin/services/trackbacks/100261.aspx</trackback:ping>
        </item>
        <item>
            <title>SketchFlow Template per Windows Phone 7</title>
            <link>http://blogs.ugidotnet.org/martinobordin/archive/2011/06/11/sketchflow-template-per-windows-phone-7.aspx</link>
            <description>&lt;p&gt; &lt;/p&gt;
&lt;p&gt;E’ stato rilasciato il template di SketchFlow per Windows Phone 7. &lt;/p&gt;
&lt;p&gt;In questo modo potrete facilmente creare mockup utilizzando pivot, panorama, datetime picker, map, application bar, behaviors per simulare la navigazione e molto altro… &lt;img src="http://blogs.ugidotnet.org/images/blogs_ugidotnet_org/martinobordin/Windows-Live-Writer/SketchFlow-Template-per-Windows-Phone-7_A2E6/wlEmoticon-smile_2.png" alt="Sorriso" class="wlEmoticon wlEmoticon-smile" style="border-bottom-style: none; border-left-style: none; border-top-style: none; border-right-style: none" /&gt;&lt;/p&gt;
&lt;p&gt;Per iniziare a creare prototipi delle vostre app, il sito da visitare è &lt;a href="http://wp7sketchflow.codeplex.com"&gt;http://wp7sketchflow.codeplex.com&lt;/a&gt;, dove troverete maggiori info e l’installer msi.&lt;/p&gt;
&lt;p&gt;&lt;a href="http://blogs.ugidotnet.org/images/blogs_ugidotnet_org/martinobordin/Windows-Live-Writer/SketchFlow-Template-per-Windows-Phone-7_A2E6/2011-06-09%2009h43_52_thumb_2.png"&gt;&lt;img width="135" height="320" border="0" src="http://blogs.ugidotnet.org/images/blogs_ugidotnet_org/martinobordin/Windows-Live-Writer/SketchFlow-Template-per-Windows-Phone-7_A2E6/2011-06-09%2009h43_52_thumb_thumb.png" alt="2011-06-09 09h43_52_thumb" title="2011-06-09 09h43_52_thumb" style="background-image: none; border-bottom: 0px; border-left: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px" /&gt;&lt;/a&gt;  &lt;a href="http://blogs.ugidotnet.org/images/blogs_ugidotnet_org/martinobordin/Windows-Live-Writer/SketchFlow-Template-per-Windows-Phone-7_A2E6/2011-06-09%2009h47_25_thumb_2.png"&gt;&lt;img width="135" height="320" border="0" src="http://blogs.ugidotnet.org/images/blogs_ugidotnet_org/martinobordin/Windows-Live-Writer/SketchFlow-Template-per-Windows-Phone-7_A2E6/2011-06-09%2009h47_25_thumb_thumb.png" alt="2011-06-09 09h47_25_thumb" title="2011-06-09 09h47_25_thumb" style="background-image: none; border-bottom: 0px; border-left: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px" /&gt;&lt;/a&gt;  &lt;a href="http://blogs.ugidotnet.org/images/blogs_ugidotnet_org/martinobordin/Windows-Live-Writer/SketchFlow-Template-per-Windows-Phone-7_A2E6/2011-06-09%2010h01_27_thumb_2.png"&gt;&lt;img width="132" height="320" border="0" src="http://blogs.ugidotnet.org/images/blogs_ugidotnet_org/martinobordin/Windows-Live-Writer/SketchFlow-Template-per-Windows-Phone-7_A2E6/2011-06-09%2010h01_27_thumb_thumb.png" alt="2011-06-09 10h01_27_thumb" title="2011-06-09 10h01_27_thumb" style="background-image: none; border-bottom: 0px; border-left: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;&lt;font size="3"&gt;Attenzione&lt;/font&gt;: p&lt;/strong&gt;er usare il template è necessario avere installato Expression Blend 4 con SketchFlow e i  &lt;a href="http://www.microsoft.com/downloads/en/details.aspx?FamilyID=77586864-ab15-40e1-bc38-713a95a56a05&amp;amp;displaylang=en"&gt;Mango developer tools&lt;/a&gt; per Windows Phone. &lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt;Happy Sketching!&lt;/p&gt;&lt;img src="http://blogs.ugidotnet.org/martinobordin/aggbug/100125.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Martino Bordin</dc:creator>
            <guid>http://blogs.ugidotnet.org/martinobordin/archive/2011/06/11/sketchflow-template-per-windows-phone-7.aspx</guid>
            <pubDate>Sat, 11 Jun 2011 13:02:44 GMT</pubDate>
            <comments>http://blogs.ugidotnet.org/martinobordin/archive/2011/06/11/sketchflow-template-per-windows-phone-7.aspx#feedback</comments>
            <wfw:commentRss>http://blogs.ugidotnet.org/martinobordin/comments/commentRss/100125.aspx</wfw:commentRss>
            <trackback:ping>http://blogs.ugidotnet.org/martinobordin/services/trackbacks/100125.aspx</trackback:ping>
        </item>
        <item>
            <title>Workaround al caching del WebClient su WP7</title>
            <link>http://blogs.ugidotnet.org/martinobordin/archive/2011/04/30/workaround-al-caching-del-webclient-su-wp7.aspx</link>
            <description>&lt;p&gt;In una mia applicazione utilizzo l’oggetto WebClient per effettuare chiamate REST ad un web service che mi restituisce un XML con il risultato.&lt;/p&gt;
&lt;p&gt;Una particolarità è che, a parità di URL, l’XML risultante cambia (es: un metodo GetRandomProducts).&lt;/p&gt;
&lt;p&gt;Fin qui niente di strano..tuttavia WebClient utilizza un meccanismo di cache interno in base all’indirizzo e non ci sono proprietà per disabilitare tale comportamento.&lt;/p&gt;
&lt;p&gt;L’unica soluzione che ho trovato è passare in QueryString un parametro random (es: un GUID).&lt;/p&gt;
&lt;p&gt;Mi sono quindi creato un extension method che qui riporto.&lt;/p&gt;
&lt;p&gt;   &lt;/p&gt;
&lt;div style="padding: 0px; margin: 0px; display: inline; float: none; color: rgb(0, 0, 0);" id="scid:9ce6104f-a9aa-4a17-a79f-3a39532ebf7c:1bf214c5-5200-4aec-ba23-c66bdb9d9e64" class="wlWriterEditableSmartContent"&gt;
&lt;div style="border: 1px solid rgb(0, 0, 128); font-family: 'Courier New',Courier,Monospace; font-size: 10pt;"&gt;
&lt;div style="background: none repeat scroll 0% 0% rgb(0, 0, 128); font-family: Verdana,Tahoma,Arial,sans-serif; font-weight: bold; padding: 2px 5px;"&gt;
&lt;div style="background: #ddd; max-height: 500px; overflow: auto"&gt;
&lt;ol style="background: #ffffff; margin: 0 0 0 2.5em; padding: 0 0 0 5px;"&gt;
    &lt;li&gt;public static class WebClientExtensions&lt;/li&gt;
    &lt;li style="background: #f3f3f3"&gt;    {&lt;/li&gt;
    &lt;li&gt;        public static void DownloadStringAsync(this WebClient client, Uri uri, object userToken, bool ignoreCache)&lt;/li&gt;
    &lt;li style="background: #f3f3f3"&gt;        {&lt;/li&gt;
    &lt;li&gt;            if (ignoreCache)&lt;/li&gt;
    &lt;li style="background: #f3f3f3"&gt;            {&lt;/li&gt;
    &lt;li&gt;                Uri freshAddress;&lt;/li&gt;
    &lt;li style="background: #f3f3f3"&gt; &lt;/li&gt;
    &lt;li&gt;                if (string.IsNullOrEmpty(uri.Query))&lt;/li&gt;
    &lt;li style="background: #f3f3f3"&gt;                {&lt;/li&gt;
    &lt;li&gt;                    freshAddress = new Uri(uri.AbsoluteUri + "?" + Guid.NewGuid());&lt;/li&gt;
    &lt;li style="background: #f3f3f3"&gt;                }&lt;/li&gt;
    &lt;li&gt;                else&lt;/li&gt;
    &lt;li style="background: #f3f3f3"&gt;                {&lt;/li&gt;
    &lt;li&gt;                    freshAddress = new Uri(uri.AbsoluteUri + "&amp;amp;" + Guid.NewGuid());&lt;/li&gt;
    &lt;li style="background: #f3f3f3"&gt;                }&lt;/li&gt;
    &lt;li&gt; &lt;/li&gt;
    &lt;li style="background: #f3f3f3"&gt;                client.DownloadStringAsync(freshAddress, userToken);&lt;/li&gt;
    &lt;li&gt;            }&lt;/li&gt;
    &lt;li style="background: #f3f3f3"&gt;            else&lt;/li&gt;
    &lt;li&gt;            {&lt;/li&gt;
    &lt;li style="background: none repeat scroll 0% 0% rgb(243, 243, 243);"&gt;                client.DownloadStringAsync(uri, userToken);&lt;/li&gt;
    &lt;li&gt;            }&lt;/li&gt;
    &lt;li style="background: none repeat scroll 0% 0% rgb(243, 243, 243);"&gt;        }&lt;/li&gt;
    &lt;li&gt;    }&lt;/li&gt;
&lt;/ol&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;

&lt;/div&gt;&lt;img src="http://blogs.ugidotnet.org/martinobordin/aggbug/100008.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Martino Bordin</dc:creator>
            <guid>http://blogs.ugidotnet.org/martinobordin/archive/2011/04/30/workaround-al-caching-del-webclient-su-wp7.aspx</guid>
            <pubDate>Sat, 30 Apr 2011 20:38:42 GMT</pubDate>
            <comments>http://blogs.ugidotnet.org/martinobordin/archive/2011/04/30/workaround-al-caching-del-webclient-su-wp7.aspx#feedback</comments>
            <wfw:commentRss>http://blogs.ugidotnet.org/martinobordin/comments/commentRss/100008.aspx</wfw:commentRss>
            <trackback:ping>http://blogs.ugidotnet.org/martinobordin/services/trackbacks/100008.aspx</trackback:ping>
        </item>
        <item>
            <title>Usare WP7 Capability Tool in Visual Studio</title>
            <link>http://blogs.ugidotnet.org/martinobordin/archive/2011/02/11/usare-wp7-capability-tool-in-visual-studio.aspx</link>
            <description>&lt;p&gt;Se sviluppate applicazioni per Window Phone 7 saprete che è necessario specificare nel file &lt;a href="http://msdn.microsoft.com/en-us/library/ff769509%28VS.92%29.aspx#BKMK_Capabilities" target="_blank"&gt;WMAppManifest.xml&lt;/a&gt; tutte le funzionalità del device che la nostra applicazione andrà ad utilizzare.&lt;/p&gt;  &lt;p&gt;La validità di quanto indicato informerà l’utente prima del download, e verrà inoltre controllata durante il processo di pubblicazione sul Marketplace.&lt;/p&gt;  &lt;p&gt;Per identificare velocemente quali funzionalità sono necessarie per il corretto funzionamento della nostra app è disponibile il CapabilityDetection, installato assieme all’SDK.&lt;/p&gt;  &lt;p&gt;Per comodità mi sono creato quindi uno shortcut tra i tool di Visual Studio in questo modo:&lt;/p&gt;  &lt;p&gt;&lt;a href="http://blogs.ugidotnet.org/images/blogs_ugidotnet_org/martinobordin/Windows-Live-Writer/56e8831c152a_D546/image_4.png"&gt;&lt;img style="background-image: none; border-bottom: 0px; border-left: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://blogs.ugidotnet.org/images/blogs_ugidotnet_org/martinobordin/Windows-Live-Writer/56e8831c152a_D546/image_thumb_1.png" width="495" height="484" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt; &lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Title:&lt;/strong&gt; WP7 Capability Detection&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Command:&lt;/strong&gt; C:\Program Files\Microsoft SDKs\Windows Phone\v7.0\Tools\CapDetect\CapabilityDetection.exe&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Arguments&lt;/strong&gt;: Rules.xml $(BinDir)&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Initial directory:&lt;/strong&gt; C:\Program Files\Microsoft SDKs\Windows Phone\v7.0\Tools\CapDetect\&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Use Output window:&lt;/strong&gt; true&lt;/p&gt;  &lt;p&gt; &lt;/p&gt;  &lt;p&gt;Ora, una volta compilata l’applicazione, posso lanciare il tool direttamente da Visual Studio, ed il risultato mi verrà mostrato nella console di output:&lt;/p&gt;  &lt;p&gt;&lt;a href="http://blogs.ugidotnet.org/images/blogs_ugidotnet_org/martinobordin/Windows-Live-Writer/56e8831c152a_D546/image_6.png"&gt;&lt;img style="background-image: none; border-bottom: 0px; border-left: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://blogs.ugidotnet.org/images/blogs_ugidotnet_org/martinobordin/Windows-Live-Writer/56e8831c152a_D546/image_thumb_2.png" width="644" height="173" /&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://blogs.ugidotnet.org/martinobordin/aggbug/99710.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Martino Bordin</dc:creator>
            <guid>http://blogs.ugidotnet.org/martinobordin/archive/2011/02/11/usare-wp7-capability-tool-in-visual-studio.aspx</guid>
            <pubDate>Fri, 11 Feb 2011 16:24:17 GMT</pubDate>
            <comments>http://blogs.ugidotnet.org/martinobordin/archive/2011/02/11/usare-wp7-capability-tool-in-visual-studio.aspx#feedback</comments>
            <wfw:commentRss>http://blogs.ugidotnet.org/martinobordin/comments/commentRss/99710.aspx</wfw:commentRss>
            <trackback:ping>http://blogs.ugidotnet.org/martinobordin/services/trackbacks/99710.aspx</trackback:ping>
        </item>
        <item>
            <title>Usare il Commanding in Windows Phone 7</title>
            <link>http://blogs.ugidotnet.org/martinobordin/archive/2011/01/25/usare-il-commanding-in-windows-phone-7.aspx</link>
            <description>&lt;p&gt;Se avete provato a sviluppare applicazioni Silverlight per Windows Phone 7 (derivante in gran parte su Silverlight 3), avrete notato che il controllo Button non ha una proprietà &lt;em&gt;Command&lt;/em&gt;, utilizzata spessissimo se sviluppate le vostre applicazioni con l’ormai famoso pattern &lt;a target="_blank" href="http://en.wikipedia.org/wiki/Model_View_ViewModel"&gt;MVVM&lt;/a&gt;, e che consiglio di utilizzare per tutte le applicazioni “non banali” (leggi “&lt;em&gt;non demo” &lt;img src="http://blogs.ugidotnet.org/images/blogs_ugidotnet_org/martinobordin/Windows-Live-Writer/Considerazioni-sul-controllo-Button-in-W_13834/wlEmoticon-smile_2.png" alt="Sorriso" class="wlEmoticon wlEmoticon-smile" style="border-style: none;" /&gt;&lt;/em&gt;). &lt;/p&gt;
&lt;p&gt;Fortunatamente, comunque, l’infrastruttura per gestire il Commanding è  supportata e perfettamente funzionante. Infatti potete tranquillamente creare i vostri ViewModel esponendo proprietà di tipo ICommand. Come fare però ad agganciare i controlli della UI a queste proprietà?&lt;/p&gt;
&lt;p&gt;Per questo proposito ci corre in aiuto il Behaviour &lt;strong&gt;EventToCommand&lt;/strong&gt; creato dall’MVP Laurent Bugnion nel suo &lt;a target="_blank" href="http://mvvmlight.codeplex.com/"&gt;MVVM Light Toolkit&lt;/a&gt; (toolkit disponibile anche per WPF e Silverlight 4).&lt;/p&gt;
&lt;p&gt;Questo behaviour permette di essere agganciato a qualsiasi evento di un oggetto, purché esso derivi da &lt;strong&gt;DependencyObject&lt;/strong&gt; (la stragrande maggioranza dei controlli UI) e che chiamerà, allo scatenarsi dell’evento voluto, il Command specificato nello XAML tramite Binding.&lt;/p&gt;
&lt;p&gt;In pratica, è possibile scrivere questo codice nell’editor XAML per eseguire il Comando &lt;em&gt;TestCommand&lt;/em&gt; quando si clicca sul Button : &lt;/p&gt;
&lt;div class="wlWriterEditableSmartContent" id="scid:9ce6104f-a9aa-4a17-a79f-3a39532ebf7c:af96d3f1-02e0-41a8-9ab3-80485a0ec19a" style="padding: 0px; margin: 0px; display: inline; float: none;"&gt;
&lt;div style="border: 1px solid rgb(0, 0, 128); color: rgb(0, 0, 0); font-family: 'Courier New',Courier,Monospace; font-size: 10pt;"&gt;
&lt;div style="background: none repeat scroll 0% 0% rgb(221, 221, 221); overflow: auto;"&gt;
&lt;ol style="background: none repeat scroll 0% 0% rgb(255, 255, 255); margin: 0pt 0pt 0pt 2em; padding: 0pt 0pt 0pt 5px;"&gt;
    &lt;li&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: rgb(163, 21, 21);"&gt;Button&lt;/span&gt;&lt;span style="color: rgb(255, 0, 0);"&gt; Content&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;="Click me"&amp;gt;&lt;/span&gt;&lt;/li&gt;
    &lt;li style="background: none repeat scroll 0% 0% rgb(243, 243, 243);"&gt;    &lt;span style="color: rgb(0, 0, 255);"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: rgb(163, 21, 21);"&gt;Interactivity&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;:&lt;/span&gt;&lt;span style="color: rgb(163, 21, 21);"&gt;Interaction.Triggers&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;&amp;gt;&lt;/span&gt;&lt;/li&gt;
    &lt;li&gt;        &lt;span style="color: rgb(0, 0, 255);"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: rgb(163, 21, 21);"&gt;Interactivity&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;:&lt;/span&gt;&lt;span style="color: rgb(163, 21, 21);"&gt;EventTrigger&lt;/span&gt; &lt;/li&gt;
    &lt;li style="background: none repeat scroll 0% 0% rgb(243, 243, 243);"&gt;            &lt;span style="color: rgb(255, 0, 0);"&gt;EventName&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;="Click"&amp;gt;&lt;/span&gt;&lt;/li&gt;
    &lt;li&gt;            &lt;span style="color: rgb(0, 0, 255);"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: rgb(163, 21, 21);"&gt;Galasoft&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;:&lt;/span&gt;&lt;span style="color: rgb(163, 21, 21);"&gt;EventToCommand&lt;/span&gt;&lt;span style="color: rgb(255, 0, 0);"&gt; Command&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;="{&lt;/span&gt;&lt;span style="color: rgb(163, 21, 21);"&gt;Binding&lt;/span&gt;&lt;span style="color: rgb(255, 0, 0);"&gt; TestCommand}&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;"/&amp;gt;&lt;/span&gt;&lt;/li&gt;
    &lt;li style="background: none repeat scroll 0% 0% rgb(243, 243, 243);"&gt;        &lt;span style="color: rgb(0, 0, 255);"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: rgb(163, 21, 21);"&gt;Interactivity&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;:&lt;/span&gt;&lt;span style="color: rgb(163, 21, 21);"&gt;EventTrigger&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;&amp;gt;&lt;/span&gt;&lt;/li&gt;
    &lt;li&gt;    &lt;span style="color: rgb(0, 0, 255);"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: rgb(163, 21, 21);"&gt;Interactivity&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;:&lt;/span&gt;&lt;span style="color: rgb(163, 21, 21);"&gt;Interaction.Triggers&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;&amp;gt;&lt;/span&gt;&lt;/li&gt;
    &lt;li style="background: none repeat scroll 0% 0% rgb(243, 243, 243);"&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: rgb(163, 21, 21);"&gt;Button&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;&amp;gt;&lt;/span&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;I namespace Interactivity e Galasoft, importati rispettivamente dagli assembly System.Windows.Interactivity e Galasoft.MvvmLight.Extras.WP7, sono cosi dichiarati:&lt;/p&gt;
&lt;div class="wlWriterEditableSmartContent" id="scid:9ce6104f-a9aa-4a17-a79f-3a39532ebf7c:c432bf0b-c401-41b6-a8b7-f33aa525e957" style="padding: 0px; margin: 0px; display: inline; float: none;"&gt;
&lt;div style="border: 1px solid rgb(0, 0, 128); color: rgb(0, 0, 0); font-family: 'Courier New',Courier,Monospace; font-size: 10pt;"&gt;
&lt;div style="background: none repeat scroll 0% 0% rgb(221, 221, 221); overflow: auto;"&gt;
&lt;ol style="background: none repeat scroll 0% 0% rgb(255, 255, 255); margin: 0pt 0pt 0pt 2em; padding: 0pt 0pt 0pt 5px;"&gt;
    &lt;li&gt;&lt;span style="color: rgb(255, 0, 0);"&gt;xmlns&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;:&lt;/span&gt;&lt;span style="color: rgb(255, 0, 0);"&gt;Interactivity&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;="clr-namespace:System.Windows.Interactivity;assembly=System.Windows.Interactivity"&lt;/span&gt; &lt;/li&gt;
    &lt;li style="background: none repeat scroll 0% 0% rgb(243, 243, 243);"&gt;&lt;span style="color: rgb(255, 0, 0);"&gt;xmlns&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;:&lt;/span&gt;&lt;span style="color: rgb(255, 0, 0);"&gt;Galasoft&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;="clr-namespace:GalaSoft.MvvmLight.Command;assembly=GalaSoft.MvvmLight.Extras.WP7"&lt;/span&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;Naturalmente è possibile utilizzare il Behaviour anche per altri tipi di eventi e controlli, ed è inoltre possibile indicare un eventuale CommandParameter, l’argomento EventArgs dell’evento e molto altro.&lt;/p&gt;
&lt;p&gt;Alla prossima.&lt;/p&gt;&lt;img src="http://blogs.ugidotnet.org/martinobordin/aggbug/99649.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Martino Bordin</dc:creator>
            <guid>http://blogs.ugidotnet.org/martinobordin/archive/2011/01/25/usare-il-commanding-in-windows-phone-7.aspx</guid>
            <pubDate>Tue, 25 Jan 2011 00:24:32 GMT</pubDate>
            <comments>http://blogs.ugidotnet.org/martinobordin/archive/2011/01/25/usare-il-commanding-in-windows-phone-7.aspx#feedback</comments>
            <wfw:commentRss>http://blogs.ugidotnet.org/martinobordin/comments/commentRss/99649.aspx</wfw:commentRss>
            <trackback:ping>http://blogs.ugidotnet.org/martinobordin/services/trackbacks/99649.aspx</trackback:ping>
        </item>
        <item>
            <title>Salvare immagini nella Media Library di Windows Phone 7</title>
            <link>http://blogs.ugidotnet.org/martinobordin/archive/2011/01/24/salvare-immagini-nella-media-library-di-windows-phone-7.aspx</link>
            <description>&lt;p&gt;Sul blog di &lt;a target="_blank" href="http://www.dotnetdoc.com/"&gt;Daniel Egan&lt;/a&gt;, MVP nonché Microsoft Regional Director, c’è un interessante &lt;a target="_blank" href="http://www.dotnetdoc.com/PermaLink,guid,105663a5-a66e-43f5-8590-a92b9aa18ed2.aspx"&gt;post&lt;/a&gt; che illustra come salvare un’immagine nella Media Library di Windows Phone 7.&lt;/p&gt;
&lt;p&gt;La procedura illustrata è abbastanza chiara ed è commentata in ogni passaggio significativo, per cui non mi soffermerò su di essa. Nel caso abbiate un oggetto &lt;em&gt;BitmapImage&lt;/em&gt; caricato con la  vostra immagine (v. esempio) tutto funzionerà tranquillamente.&lt;/p&gt;
&lt;p&gt;Tuttavia un oggetto &lt;em&gt;BitmapImage&lt;/em&gt; può essere creato passando al costruttore un oggetto URI che identifica la risorsa, sia essa remota (caricata da web) o locale (espressa tramite &lt;a target="_blank" href="http://msdn.microsoft.com/en-us/library/aa970069.aspx"&gt;Pack Uri&lt;/a&gt;). In questo caso, però, verrà sollevata un’eccezione di tipo &lt;strong&gt;NullReferenceException: Invalid pointer&lt;/strong&gt; se l’immagine non è stata ancora scaricata completamente (l’operazione è &lt;u&gt;asincrona&lt;/u&gt;) quando tentate di salvarla.&lt;/p&gt;
&lt;p&gt;Per risolvere tale problema, è sufficiente:&lt;/p&gt;
&lt;ul&gt;
    &lt;li&gt;inizializzare l’oggetto &lt;em&gt;BitmapImage &lt;/em&gt;impostando &lt;em&gt;&lt;strong&gt;CreateOptions = BitmapCreateOptions.None&lt;/strong&gt;&lt;/em&gt; (il default è DelayCreation): &lt;/li&gt;
&lt;/ul&gt;
&lt;div class="wlWriterEditableSmartContent" id="scid:9ce6104f-a9aa-4a17-a79f-3a39532ebf7c:46372d05-fa61-430b-a44e-fe5af867864c" style="padding: 0px; margin: 0px; display: inline; float: none;"&gt;
&lt;div style="border: 1px solid rgb(0, 0, 128); color: rgb(0, 0, 0); font-family: 'Courier New',Courier,Monospace; font-size: 10pt;"&gt;
&lt;div style="background: none repeat scroll 0% 0% rgb(221, 221, 221); max-height: 300px; overflow: auto;"&gt;
&lt;ol style="background: none repeat scroll 0% 0% rgb(255, 255, 255); margin: 0pt 0pt 0pt 2em; padding: 0pt 0pt 0pt 5px;"&gt;
    &lt;li&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;var&lt;/span&gt; bitmap = &lt;span style="color: rgb(0, 0, 255);"&gt;new&lt;/span&gt; &lt;span style="color: rgb(43, 145, 175);"&gt;BitmapImage&lt;/span&gt;&lt;/li&gt;
    &lt;li style="background: none repeat scroll 0% 0% rgb(243, 243, 243);"&gt;{&lt;/li&gt;
    &lt;li&gt;    CreateOptions = &lt;span style="color: rgb(43, 145, 175);"&gt;BitmapCreateOptions&lt;/span&gt;.None,&lt;/li&gt;
    &lt;li style="background: none repeat scroll 0% 0% rgb(243, 243, 243);"&gt;    UriSource = uriSource&lt;/li&gt;
    &lt;li&gt;};&lt;/li&gt;
&lt;/ol&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;In questo modo l’immagine verrà inizializzata immediatamente e non quando verrà visualizzata nella UI (quindi, nel nostro caso, &lt;u&gt;mai&lt;/u&gt;).&lt;/p&gt;
&lt;ul&gt;
    &lt;li&gt;agganciarsi all’evento &lt;em&gt;ImageOpened&lt;/em&gt; per salvare l’immagine scaricata nella Media Library come visto nell’esempio di Daniel Egan: &lt;/li&gt;
&lt;/ul&gt;
&lt;div class="wlWriterEditableSmartContent" id="scid:9ce6104f-a9aa-4a17-a79f-3a39532ebf7c:7d8fdd40-7d90-43f8-9945-4cf05c182dcb" style="padding: 0px; margin: 0px; display: inline; float: none;"&gt;
&lt;div style="border: 1px solid rgb(0, 0, 128); color: rgb(0, 0, 0); font-family: 'Courier New',Courier,Monospace; font-size: 10pt;"&gt;
&lt;div style="background: none repeat scroll 0% 0% rgb(221, 221, 221); overflow: auto;"&gt;
&lt;ol style="background: none repeat scroll 0% 0% rgb(255, 255, 255); margin: 0pt 0pt 0pt 2em; padding: 0pt 0pt 0pt 5px;"&gt;
    &lt;li&gt;bitmap.ImageOpened += (s, e) =&amp;gt;&lt;/li&gt;
    &lt;li style="background: none repeat scroll 0% 0% rgb(243, 243, 243);"&gt;                {&lt;/li&gt;
    &lt;li&gt;                    &lt;span style="color: rgb(0, 0, 255);"&gt;var&lt;/span&gt; image = (&lt;span style="color: rgb(43, 145, 175);"&gt;BitmapImage&lt;/span&gt;)s;&lt;/li&gt;
    &lt;li style="background: none repeat scroll 0% 0% rgb(243, 243, 243);"&gt;                    &lt;/li&gt;
    &lt;li&gt;                    &lt;span style="color: rgb(0, 128, 0);"&gt;// Save image to media library...&lt;/span&gt;&lt;/li&gt;
    &lt;li style="background: none repeat scroll 0% 0% rgb(243, 243, 243);"&gt;                };&lt;/li&gt;
&lt;/ol&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;br /&gt;
&lt;pre&gt;  &lt;/pre&gt;
&lt;pre&gt;Il gioco è fatto!&lt;/pre&gt;
&lt;pre&gt; &lt;/pre&gt;
&lt;pre&gt;Alla prossima.&lt;/pre&gt;&lt;img src="http://blogs.ugidotnet.org/martinobordin/aggbug/99661.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Martino Bordin</dc:creator>
            <guid>http://blogs.ugidotnet.org/martinobordin/archive/2011/01/24/salvare-immagini-nella-media-library-di-windows-phone-7.aspx</guid>
            <pubDate>Mon, 24 Jan 2011 22:58:00 GMT</pubDate>
            <comments>http://blogs.ugidotnet.org/martinobordin/archive/2011/01/24/salvare-immagini-nella-media-library-di-windows-phone-7.aspx#feedback</comments>
            <wfw:commentRss>http://blogs.ugidotnet.org/martinobordin/comments/commentRss/99661.aspx</wfw:commentRss>
            <trackback:ping>http://blogs.ugidotnet.org/martinobordin/services/trackbacks/99661.aspx</trackback:ping>
        </item>
        <item>
            <title>Programming Windows Phone 7</title>
            <link>http://blogs.ugidotnet.org/martinobordin/archive/2010/11/01/programming-windows-phone-7.aspx</link>
            <description>&lt;p&gt;Volevo segnalarvi che, da qualche giorno, è disponibile GRATUITAMENTE un e-book inerente la programmazione per Windows Phone 7: “Programming Windows Phone 7”, di Charles Petzold.&lt;/p&gt;  &lt;p&gt;E’ un bel “librone” con più di mille pagine che va a toccare sia lo sviluppo con Silverlight che quello con XNA. &lt;/p&gt;  &lt;p&gt;Ecco il link: &lt;a href="http://www.charlespetzold.com/phone/index.html" target="_blank"&gt;Programming Windows Phone 7&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;Credo proprio che ci darò un occhio! &lt;img style="border-bottom-style: none; border-right-style: none; border-top-style: none; border-left-style: none" class="wlEmoticon wlEmoticon-smile" alt="Sorriso" src="http://blogs.ugidotnet.org/images/blogs_ugidotnet_org/martinobordin/Windows-Live-Writer/35acaf13cf19_D0A7/wlEmoticon-smile_2.png" /&gt;&lt;/p&gt;  &lt;p&gt;Alla prossima&lt;/p&gt;&lt;img src="http://blogs.ugidotnet.org/martinobordin/aggbug/99424.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Martino Bordin</dc:creator>
            <guid>http://blogs.ugidotnet.org/martinobordin/archive/2010/11/01/programming-windows-phone-7.aspx</guid>
            <pubDate>Mon, 01 Nov 2010 15:51:00 GMT</pubDate>
            <comments>http://blogs.ugidotnet.org/martinobordin/archive/2010/11/01/programming-windows-phone-7.aspx#feedback</comments>
            <wfw:commentRss>http://blogs.ugidotnet.org/martinobordin/comments/commentRss/99424.aspx</wfw:commentRss>
            <trackback:ping>http://blogs.ugidotnet.org/martinobordin/services/trackbacks/99424.aspx</trackback:ping>
        </item>
    </channel>
</rss>