 <p>I'm not sure about your approach or why there are performance issues but here is my solution to similar issue.</p> <p>The full solution can be found <a href="https://github.com/steinborge/ProxyTypeHelper/wiki" rel="nofollow">https://github.com/steinborge/ProxyTypeHelper/wiki</a></p> <p>What I wanted to achieve was the ability to create a 'generic' view model which can then be assigned to a datatemplate. The data template is just a user control. In the case where you have a lot of simple data maintenance screens would save a lot of repetitive code. </p> <p>But had a couple of issues. Datatemplates don't work well with in XAML with generics and if you have a lot of data templates you are creating a lot of XAML - especially if you wanted to use it in separate views. In your case you mention up to 90 views - this would be a lot of XAML.</p> <p>Solution is to store the templates in a lookup and use a content control and DataTemplateSelector populate depending upon the DataContext. So first need to register the data template/views:</p> <pre><code> manager.RegisterDataTemplate(typeof(GenericViewModel&lt;CarType, WPFEventInter.ViewModel.CarTypeViewModel&gt;), typeof(WPFEventInter.UserControls.CarTypesView)); manager.RegisterDataTemplate(typeof(GenericViewModel&lt;Colour, WPFEventInter.ViewModel.ColourViewModel&gt;), typeof(WPFEventInter.UserControls.ColourView)); </code></pre> <p>RegisterDataTemplate just adds the datatemplate to a dictionary:</p> <pre><code> public void RegisterDataTemplate(Type viewModelType, Type dataTemplateType, string Tag="") { var template = BuildDataTemplate(viewModelType, dataTemplateType) ; templates.Add(viewModelType.ToString() + Tag, template); } private DataTemplate BuildDataTemplate(Type viewModelType, Type viewType) { var template = new DataTemplate() { DataType = viewModelType, VisualTree = new FrameworkElementFactory(viewType) }; return template; } </code></pre> <p>Now create a view with a ContentPresenter control .This will display the view depending upon the view's Datacontext. </p> <p>The DataTemplateSelector looks like the following. This returns the appropriate view depending upon the datacontext:</p> <pre><code>public class ContentControlGenericTemplateSelector : DataTemplateSelector { public override DataTemplate SelectTemplate(object item, DependencyObject container) { DataTemplate retVal = null; try { retVal = Core.WPF.Infrastructure.DataTemplateManager.templates[item.GetType().ToString()]; } catch //empty catch to prevent design time errors.. { } return retVal; } </code></pre>