﻿<?xml version="1.0" encoding="utf-8"?><rss version="2.0"><channel><title>Hibernating Rhinos</title><link>http://blogs.hibernatingrhinos.com/</link><description>Hibernating Rhinos</description><copyright>Hibernating Rhinos (c) 2009 - 2011 (c) 2012</copyright><ttl>60</ttl><item><title>Fixing memory leaks in RavenDB Management Studio - FluidMoveBehavior</title><description>&lt;p&gt;Continuing on my last blog post in this series, which &lt;a href="http://blog.hibernatingrhinos.com/12355/fixing-memory-leaks-in-ravendb-management-studio-weakreference"&gt;I talked about the WeakReference&lt;/a&gt;, that time I’ll talk about the &lt;a href="http://blogs.msdn.com/b/expression/archive/2010/03/16/dynamic-layout-and-transitions-in-expression-blend-4.aspx"&gt;FluidMoveBehavior&lt;/a&gt;. &lt;/p&gt; &lt;p&gt;The FluidMoveBehavior gives you a great transition effect to the items in your WrapPanel, which is in the Silverlight toolkit. The FluidMoveBehavior is part of the Expression Blend and it’s exists in the microsoft.expression.interactions.dll&lt;em&gt;.&lt;/em&gt;&lt;/p&gt; &lt;p&gt;When I profiled the application with a memory profiler, I have some memory leaks that caused by the FluidMoveBehavior. Surprised I Googled the following “FluidMoveBehavior memory leak” and the first result was &lt;a href="http://social.expression.microsoft.com/Forums/en/blend/thread/f14d1486-24ba-447b-9712-e16f5457a08b"&gt;this&lt;/a&gt; thread, which effectively showed that this is a known issue with no fix yet.&lt;/p&gt; &lt;p&gt;So removing the FluidMoveBehavior from the Management Studio fixes a big source of memory leak. What’s interesting, that the visual effect itself of the FluidMoveBehaviour barley was needed, since we already populating the panel with items each time the panel size is changed.&lt;/p&gt;</description><link>http://blogs.hibernatingrhinos.com/12356/fixing-memory-leaks-in-ravendb-management-studio-fluidmovebehavior?key=ef9da14e-ff84-43f1-a5fa-aa7328bc14c6</link><guid>http://blogs.hibernatingrhinos.com/12356/fixing-memory-leaks-in-ravendb-management-studio-fluidmovebehavior?key=ef9da14e-ff84-43f1-a5fa-aa7328bc14c6</guid><pubDate>Tue, 28 Feb 2012 10:00:00 GMT</pubDate></item><item><title>Fixing memory leaks in RavenDB Management Studio - WeakReference</title><description>&lt;p&gt;Continue from the last blog post in this series, which &lt;a href="http://blog.hibernatingrhinos.com/12353/fixing-memory-leaks-in-ravendb-management-studio-weakeventlistener"&gt;I talked about the WeakEventListener&lt;/a&gt;, now I’m going to talk about using the WeakReference.&lt;/p&gt; &lt;p&gt;In the RavenDB Management Studio we have 4 pages that contains lots of data: the Home page, Collections page, Documents page and Indexes page. Once you enter to one of those pages, we’ll fetch the data from the RavenDB database but in order to avoid fetching it each time we navigate to that page the data is stored in a static variable. This way, if you re-navigate to a page, you will see the database immediately while we making a background request to RavenDB in order to give you more updated data.&lt;/p&gt; &lt;p&gt;You can look on this code for example:&lt;/p&gt;&lt;pre class="csharpcode"&gt;&lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;class&lt;/span&gt; HomeModel : ViewModel
{
    &lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;&lt;font style="background-color: #ffff00"&gt;static&lt;/font&gt;&lt;/span&gt; Observable&amp;lt;DocumentsModel&amp;gt; RecentDocuments { get; &lt;span class="kwrd"&gt;private&lt;/span&gt; set; }

    &lt;span class="kwrd"&gt;static&lt;/span&gt; HomeModel()
    {
        RecentDocuments = &lt;span class="kwrd"&gt;new&lt;/span&gt; Observable&amp;lt;DocumentsModel&amp;gt;
                          {
                            Value = &lt;span class="kwrd"&gt;new&lt;/span&gt; DocumentsModel
                                    {
                                        Header = &lt;span class="str"&gt;"Recent Documents"&lt;/span&gt;,
                                        Pager = {PageSize = 15},
                                    }
                          };
    }

    &lt;span class="kwrd"&gt;public&lt;/span&gt; HomeModel()
    {
        ModelUrl = &lt;span class="str"&gt;"/home"&lt;/span&gt;;
        RecentDocuments.Value.Pager.SetTotalResults(&lt;span class="kwrd"&gt;new&lt;/span&gt; Observable&amp;lt;&lt;span class="kwrd"&gt;long&lt;/span&gt;?&amp;gt;(ApplicationModel.Database.Value.Statistics, v =&amp;gt; ((DatabaseStatistics)v).CountOfDocuments));
        ShowCreateSampleData = &lt;span class="kwrd"&gt;new&lt;/span&gt; Observable&amp;lt;&lt;span class="kwrd"&gt;bool&lt;/span&gt;&amp;gt;(RecentDocuments.Value.Pager.TotalResults, ShouldShowCreateSampleData);
    }

    &lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;override&lt;/span&gt; Task TimerTickedAsync()
    {
        &lt;span class="kwrd"&gt;return&lt;/span&gt; &lt;font style="background-color: #ffff00"&gt;RecentDocuments.Value.TimerTickedAsync();&lt;/font&gt;
    }
}&lt;/pre&gt;
&lt;style type="text/css"&gt;.csharpcode, .csharpcode pre
{
	font-size: small;
	color: black;
	font-family: consolas, "Courier New", courier, monospace;
	background-color: #ffffff;
	/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt 
{
	background-color: #f4f4f4;
	width: 100%;
	margin: 0em;
}
.csharpcode .lnum { color: #606060; }
&lt;/style&gt;

&lt;p&gt;The problem is, what happening when the application consumes to much memory because of all of this static data? In that case there likely to be a performance issues. In order to avoid that, we used make static data to be a &lt;a href="http://en.wikipedia.org/wiki/Weak_reference"&gt;WeakReference&lt;/a&gt; type, so we basically say to the Silverlight GC engine: If you want to GC the data, please do so. And in this case we’ll just re-initialize it when we need the data again.&lt;/p&gt;
&lt;p&gt;This had an huge impact of the memory consumption of the Management Studio application, but we still had some memory leaks which I’ll talk about in the next blog post.&lt;/p&gt;</description><link>http://blogs.hibernatingrhinos.com/12355/fixing-memory-leaks-in-ravendb-management-studio-weakreference?key=8a8909db-2f61-4337-bef4-67688dcbd2af</link><guid>http://blogs.hibernatingrhinos.com/12355/fixing-memory-leaks-in-ravendb-management-studio-weakreference?key=8a8909db-2f61-4337-bef4-67688dcbd2af</guid><pubDate>Mon, 27 Feb 2012 10:00:00 GMT</pubDate></item><item><title>Why make WeakEventListener internal?</title><description>&lt;p&gt;In the previous post I described how I used the WeakEventListener from the &lt;a href="http://silverlight.codeplex.com/"&gt;Silverlight Toolkit&lt;/a&gt; in order to solve a memory leak. This class is a very needed tool, and it’s something that is recommended to use in Silverlight applications, in order to avoid memory leaks.&lt;/p&gt; &lt;p&gt;Since this class is internal, you must copy the code from &lt;a href="https://silverlight.svn.codeplex.com/svn/Release/Silverlight4/Source/Controls.Toolkit/Common/WeakEventListener.cs"&gt;the source&lt;/a&gt; (thanks to the Microsoft Public License) to your Silverlight application. I’m not sure if this is still the case in the last version of the toolkit, which is compatible with Silverlight 5 (the source code for this is not public when I wrote this), but in any case, if you’re developing a Silverlight application, I’m pretty sure that you’ll need this class.&lt;/p&gt;</description><link>http://blogs.hibernatingrhinos.com/12354/why-make-weakeventlistener-internal?key=4a9da334-6909-463f-ae0a-5d974e0a2b33</link><guid>http://blogs.hibernatingrhinos.com/12354/why-make-weakeventlistener-internal?key=4a9da334-6909-463f-ae0a-5d974e0a2b33</guid><pubDate>Fri, 24 Feb 2012 10:00:00 GMT</pubDate></item><item><title>Fixing memory leaks in RavenDB Management Studio - WeakEventListener</title><description>&lt;p&gt;After shipping the new version of the Management Studio for RavenDB, which was part of build #573, we got reports from our users that it have some memory leaks. &lt;a href="http://issues.hibernatingrhinos.com/issue/RavenDB-29?query=leak"&gt;This&lt;/a&gt; report indicated that we have an huge memory leak in the management studio. I started to investigate this and found a bunch problems with cause it. In this blog posts series I’ll share with you what it took to fix it.&lt;/p&gt; &lt;p&gt;RavenDB Management Studio is a Silverlight based application. One of the mistakes that can be done easily in a Silverlight application (as many other platforms for UI applications) is to attach an event to an object, than discard that object. The problem is that the object will never be cleaned up from the memory, since we have a reference for it – the event listener.&lt;/p&gt; &lt;p&gt;Consider the following code for example:&lt;/p&gt;&lt;pre class="csharpcode"&gt;&lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;static&lt;/span&gt; &lt;span class="kwrd"&gt;class&lt;/span&gt; ModelAttacher
{
    &lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;static&lt;/span&gt; &lt;span class="kwrd"&gt;readonly&lt;/span&gt; DependencyProperty AttachObservableModelProperty =
        DependencyProperty.RegisterAttached(&lt;span class="str"&gt;"AttachObservableModel"&lt;/span&gt;, &lt;span class="kwrd"&gt;typeof&lt;/span&gt;(&lt;span class="kwrd"&gt;string&lt;/span&gt;), &lt;span class="kwrd"&gt;typeof&lt;/span&gt;(ModelAttacher), &lt;span class="kwrd"&gt;new&lt;/span&gt; PropertyMetadata(&lt;span class="kwrd"&gt;null&lt;/span&gt;, AttachObservableModelCallback));
    
    &lt;span class="kwrd"&gt;private&lt;/span&gt; &lt;span class="kwrd"&gt;static&lt;/span&gt; &lt;span class="kwrd"&gt;void&lt;/span&gt; AttachObservableModelCallback(DependencyObject source, DependencyPropertyChangedEventArgs args)
    {
        var typeName = args.NewValue &lt;span class="kwrd"&gt;as&lt;/span&gt; &lt;span class="kwrd"&gt;string&lt;/span&gt;;
        var view = source &lt;span class="kwrd"&gt;as&lt;/span&gt; FrameworkElement;
        &lt;span class="kwrd"&gt;if&lt;/span&gt; (typeName == &lt;span class="kwrd"&gt;null&lt;/span&gt; || view == &lt;span class="kwrd"&gt;null&lt;/span&gt;)
            &lt;span class="kwrd"&gt;return&lt;/span&gt;;

        var modelType = Type.GetType(&lt;span class="str"&gt;"Raven.Studio.Models."&lt;/span&gt; + typeName) ?? Type.GetType(typeName);
        &lt;span class="kwrd"&gt;if&lt;/span&gt; (modelType == &lt;span class="kwrd"&gt;null&lt;/span&gt;)
            &lt;span class="kwrd"&gt;return&lt;/span&gt;;

        &lt;span class="kwrd"&gt;try&lt;/span&gt;
        {
            var modelInstance = Activator.CreateInstance(modelType);
            var observableType = &lt;span class="kwrd"&gt;typeof&lt;/span&gt;(Observable&amp;lt;&amp;gt;).MakeGenericType(modelType);
            var observable = Activator.CreateInstance(observableType) &lt;span class="kwrd"&gt;as&lt;/span&gt; IObservable;
            var piValue = observableType.GetProperty(&lt;span class="str"&gt;"Value"&lt;/span&gt;);
            piValue.SetValue(observable, modelInstance, &lt;span class="kwrd"&gt;null&lt;/span&gt;);
            view.DataContext = observable;

            var model = modelInstance &lt;span class="kwrd"&gt;as&lt;/span&gt; Model;
            &lt;span class="kwrd"&gt;if&lt;/span&gt; (model == &lt;span class="kwrd"&gt;null&lt;/span&gt;) 
                &lt;span class="kwrd"&gt;return&lt;/span&gt;;
            model.ForceTimerTicked();

            SetPageTitle(modelType, modelInstance, view);
            
            &lt;font style="background-color: #ffff00"&gt;view.Loaded += ViewOnLoaded;&lt;/font&gt;
        }
        &lt;span class="kwrd"&gt;catch&lt;/span&gt; (Exception ex)
        {
            &lt;span class="kwrd"&gt;throw&lt;/span&gt; &lt;span class="kwrd"&gt;new&lt;/span&gt; InvalidOperationException(&lt;span class="kwrd"&gt;string&lt;/span&gt;.Format(&lt;span class="str"&gt;"Cannot create instance of model type: {0}"&lt;/span&gt;, modelType), ex);
        }
    }
    
    &lt;span class="kwrd"&gt;private&lt;/span&gt; &lt;span class="kwrd"&gt;static&lt;/span&gt; &lt;span class="kwrd"&gt;void&lt;/span&gt; ViewOnLoaded(&lt;span class="kwrd"&gt;object&lt;/span&gt; sender, RoutedEventArgs routedEventArgs)
    {
        var view = (FrameworkElement)sender;
        var observable = view.DataContext &lt;span class="kwrd"&gt;as&lt;/span&gt; IObservable;
        &lt;span class="kwrd"&gt;if&lt;/span&gt; (observable == &lt;span class="kwrd"&gt;null&lt;/span&gt;)
            &lt;span class="kwrd"&gt;return&lt;/span&gt;;
        var model = (Model)observable.Value;
        model.ForceTimerTicked();

        var viewModel = model &lt;span class="kwrd"&gt;as&lt;/span&gt; ViewModel;
        &lt;span class="kwrd"&gt;if&lt;/span&gt; (viewModel == &lt;span class="kwrd"&gt;null&lt;/span&gt;) &lt;span class="kwrd"&gt;return&lt;/span&gt;;
        viewModel.LoadModel(UrlUtil.Url);
    }&lt;/pre&gt;
&lt;p&gt;For information about the ModelAttacher pattern, take a look on &lt;a href="http://blog.hibernatingrhinos.com/11265/model-attacher-pattern-in-silverlight-applications"&gt;this&lt;/a&gt; blog post.&lt;/p&gt;
&lt;p&gt;What it means basically is that we creating a models for each page, but never dispose it. So basically each time you navigate to a page, a new view model is created for the page but the old one never got cleaned up.&lt;/p&gt;
&lt;p&gt;There was more examples like that, where we have an event keeping a reference to a dead objects. You can look on the RavenDB commits log if you interested in the details. But what is the way to solve this?&lt;/p&gt;
&lt;p&gt;In order to solve this I copy the WeakEventListener from the &lt;a href="http://silverlight.codeplex.com/"&gt;Silverlight Toolkit&lt;/a&gt;, which is internal class. Using the WeakEventListener in order to attach to objects solved the above memory issue since we don’t have a strong reference to the dead object anymore, and the GC can just clean them up.&lt;/p&gt;</description><link>http://blogs.hibernatingrhinos.com/12353/fixing-memory-leaks-in-ravendb-management-studio-weakeventlistener?key=e664b1d5-0cf5-469b-adbe-d047b5003ce7</link><guid>http://blogs.hibernatingrhinos.com/12353/fixing-memory-leaks-in-ravendb-management-studio-weakeventlistener?key=e664b1d5-0cf5-469b-adbe-d047b5003ce7</guid><pubDate>Thu, 23 Feb 2012 06:22:00 GMT</pubDate></item><item><title>Model Attacher pattern in Silverlight applications</title><description>&lt;p&gt;A while ago, when we started to develop our next version of RavenDB Studio, one of our goals was to make its code as simple as possible. That way, we ensure that it is easy to understand what is going on, so making changes to the Studio should be a trivial task.&lt;/p&gt; &lt;p&gt;In order to achieve that, we decided to not use any MVVM toolkits, but simply use a simple pages (views) and attach a model to them. In this approach, every view (page) know how to resolve its view-model by itself. This makes the Silverlight code much more simple, since it let’s you open a specific view by just navigating to its relative URL. &lt;/p&gt; &lt;p&gt;In order to make this possible we have a ModelAttacher.AttachModel attached property on the page, which takes care of instantiating the view-model and attach it to the page’s DataContext property. &lt;/p&gt; &lt;p&gt;Take a look on the following tipical view (page) in order to see it in action:&lt;/p&gt;&lt;pre class="csharpcode"&gt;&lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;Infrastructure:View&lt;/span&gt; &lt;span class="attr"&gt;x:Class&lt;/span&gt;&lt;span class="kwrd"&gt;="Raven.Studio.Views.Home"&lt;/span&gt;
                     &lt;span class="attr"&gt;xmlns&lt;/span&gt;&lt;span class="kwrd"&gt;="http://schemas.microsoft.com/winfx/2006/xaml/presentation"&lt;/span&gt;
                     &lt;span class="attr"&gt;xmlns:x&lt;/span&gt;&lt;span class="kwrd"&gt;="http://schemas.microsoft.com/winfx/2006/xaml"&lt;/span&gt;
                     &lt;span class="attr"&gt;xmlns:Infrastructure&lt;/span&gt;&lt;span class="kwrd"&gt;="clr-namespace:Raven.Studio.Infrastructure"&lt;/span&gt;
                     &lt;span class="attr"&gt;Title&lt;/span&gt;&lt;span class="kwrd"&gt;="Home"&lt;/span&gt;
                     &lt;span class="attr"&gt;Style&lt;/span&gt;&lt;span class="kwrd"&gt;="{StaticResource PageStyle}"&lt;/span&gt;
                     &lt;span class="attr"&gt;Infrastructure:ModelAttacher&lt;/span&gt;.&lt;span class="attr"&gt;AttachModel&lt;/span&gt;&lt;span class="kwrd"&gt;="HomeModel"&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;

&lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;Infrastructure:View&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;
&lt;style type="text/css"&gt;.csharpcode, .csharpcode pre
{
	font-size: small;
	color: black;
	font-family: consolas, "Courier New", courier, monospace;
	background-color: #ffffff;
	/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt 
{
	background-color: #f4f4f4;
	width: 100%;
	margin: 0em;
}
.csharpcode .lnum { color: #606060; }
&lt;/style&gt;

&lt;p&gt;In this example, we have an empty Home view, which is make a use of a HomeModel. The ModelAttacher’s job here is to create an instance of the HomeModel class and attach it to the View.DataContext property. (The view is a simple class that derives from Page.)&lt;/p&gt;
&lt;p&gt;This is how ModelAttacher works, in order to achieve this:&lt;/p&gt;&lt;pre class="csharpcode"&gt;&lt;span class="kwrd"&gt;namespace&lt;/span&gt; Raven.Studio.Infrastructure
{
    &lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;static&lt;/span&gt; &lt;span class="kwrd"&gt;class&lt;/span&gt; ModelAttacher
    {
        &lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;static&lt;/span&gt; &lt;span class="kwrd"&gt;readonly&lt;/span&gt; DependencyProperty AttachModelProperty =
            DependencyProperty.RegisterAttached(&lt;span class="str"&gt;"AttachModel"&lt;/span&gt;, &lt;span class="kwrd"&gt;typeof&lt;/span&gt;(&lt;span class="kwrd"&gt;string&lt;/span&gt;), &lt;span class="kwrd"&gt;typeof&lt;/span&gt;(ModelAttacher), &lt;span class="kwrd"&gt;new&lt;/span&gt; PropertyMetadata(&lt;span class="kwrd"&gt;null&lt;/span&gt;, AttachModelCallback));
        
        &lt;span class="kwrd"&gt;private&lt;/span&gt; &lt;span class="kwrd"&gt;static&lt;/span&gt; &lt;span class="kwrd"&gt;void&lt;/span&gt; AttachModelCallback(DependencyObject source, DependencyPropertyChangedEventArgs args)
        {
            var typeName = args.NewValue &lt;span class="kwrd"&gt;as&lt;/span&gt; &lt;span class="kwrd"&gt;string&lt;/span&gt;;
            var view = source &lt;span class="kwrd"&gt;as&lt;/span&gt; FrameworkElement;
            &lt;span class="kwrd"&gt;if&lt;/span&gt; (typeName == &lt;span class="kwrd"&gt;null&lt;/span&gt; || view == &lt;span class="kwrd"&gt;null&lt;/span&gt;)
                &lt;span class="kwrd"&gt;return&lt;/span&gt;;

            var modelType = Type.GetType(&lt;span class="str"&gt;"Raven.Studio.Models."&lt;/span&gt; + typeName) ?? Type.GetType(typeName);
            &lt;span class="kwrd"&gt;if&lt;/span&gt; (modelType == &lt;span class="kwrd"&gt;null&lt;/span&gt;)
                &lt;span class="kwrd"&gt;return&lt;/span&gt;;

            &lt;span class="kwrd"&gt;try&lt;/span&gt;
            {
                var model = Activator.CreateInstance(modelType);
                view.DataContext = model;
            }
            &lt;span class="kwrd"&gt;catch&lt;/span&gt; (Exception ex)
            {
                &lt;span class="kwrd"&gt;throw&lt;/span&gt; &lt;span class="kwrd"&gt;new&lt;/span&gt; InvalidOperationException(&lt;span class="kwrd"&gt;string&lt;/span&gt;.Format(&lt;span class="str"&gt;"Cannot create instance of model type: {0}"&lt;/span&gt;, modelType), ex);
            }
        }

        &lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;static&lt;/span&gt; &lt;span class="kwrd"&gt;string&lt;/span&gt; GetAttachModel(UIElement element)
        {
            &lt;span class="kwrd"&gt;return&lt;/span&gt; (&lt;span class="kwrd"&gt;string&lt;/span&gt;)element.GetValue(AttachModelProperty);
        }

        &lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;static&lt;/span&gt; &lt;span class="kwrd"&gt;void&lt;/span&gt; SetAttachModel(UIElement element, &lt;span class="kwrd"&gt;string&lt;/span&gt; &lt;span class="kwrd"&gt;value&lt;/span&gt;)
        {
            element.SetValue(AttachModelProperty, &lt;span class="kwrd"&gt;value&lt;/span&gt;);
        }
    }
}&lt;/pre&gt;
&lt;style type="text/css"&gt;.csharpcode, .csharpcode pre
{
	font-size: small;
	color: black;
	font-family: consolas, "Courier New", courier, monospace;
	background-color: #ffffff;
	/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt 
{
	background-color: #f4f4f4;
	width: 100%;
	margin: 0em;
}
.csharpcode .lnum { color: #606060; }
&lt;/style&gt;

&lt;p&gt;Now in order to attach a model to its view, we need to just add the attached property to the view element:&amp;nbsp; Infrastructure:ModelAttacher.AttachModel="HomeModel".&lt;/p&gt;
&lt;p&gt;Please note that in this case any view-model has to have a default (parameters-less) constructor. In order to solve that, what we have done in RavenDB Studio is to have a ModelBase class for our view-models which make sure to expose all our common model dependencies.&lt;/p&gt;</description><link>http://blogs.hibernatingrhinos.com/11265/model-attacher-pattern-in-silverlight-applications?key=d2f671da-cd86-4717-887f-973536612d26</link><guid>http://blogs.hibernatingrhinos.com/11265/model-attacher-pattern-in-silverlight-applications?key=d2f671da-cd86-4717-887f-973536612d26</guid><pubDate>Thu, 24 Nov 2011 06:49:00 GMT</pubDate></item></channel></rss>
