How to resolve the "Could not create an instance of Type" error when "Reloading the designer" in Visual Studio 2008?

So, I recently started trying to implement the application I am developing using an MVVM model.

However, I ran into this annoying problem where when I have my main window’s XAML code including this line:

1
<uc_treeview:PluginTreeViewControl Margin="0,0,0,29" MinWidth="240" />

My PluginTreeViewControl object looks as follows:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
using System.Collections.ObjectModel;
using System.Windows.Controls;
using System.Windows.Input;
using LANDesk.HealthCheck.PluginOutput;
using LANDesk.HealthCheckViewer.LoadOnDemand.Sections;
 
namespace LANDesk.HealthCheckViewer.LoadOnDemand.PluginTreeView
{
    public partial class PluginTreeViewControl : UserControl
    {
        //readonly GroupViewModel mGroup;
 
        public PluginTreeViewControl()
        {
            InitializeComponent();
 
            Output o = new Output();
            OutputViewModel viewModel = new OutputViewModel(o.PluginGroups);
            base.DataContext = viewModel;
        }
    }
}

So I found that the lines after the InitializeComponent() function are causing my attempts to “Reload the designer” to fail. If I comment them out, the designer reloads. Of course, then if I have to uncomment them before compiling or debugging, and comment them again, when working in the Designer.

So after a while a thought came to me that maybe their is some type of “if” statement that would be true for the designer but not for runtime. So I researched and found this: DesignerProperties.GetIsInDesignMode Method

After reading about this, I changed my code in my Constructor to this:

1
2
3
4
5
6
7
8
9
10
11
12
13
public PluginTreeViewControl()
{
    InitializeComponent();
 
    // This "if" block is only for Visual Studio Designer
    if (DesignerProperties.GetIsInDesignMode(this))
    {
        return;
    }
    Output o = new Output();
    OutputViewModel viewModel = new OutputViewModel(o.PluginGroups);
    base.DataContext = viewModel;
}

And wouldn’t you know it, I have solved the issue entirely. The Designer now reloads just fine (as it doesn’t seem to error) and at run time the “if” statement is always false so the lines I need always run.

Also, the overhead of an “if (DesignerProperties.GetIsInDesignMode(this))” in inconsequential. However, I attempted to remove this overhead in Release builds as follows:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
public PluginTreeViewControl()
{
    InitializeComponent();
 
    // This "if" block is only for Visual Studio Designer
    #if DEBUG
    if (DesignerProperties.GetIsInDesignMode(this))
    {
        return;
    }
    #endif
    Output o = new Output();
    OutputViewModel viewModel = new OutputViewModel(o.PluginGroups);
    base.DataContext = viewModel;
}

Now, I don’t have a problem with my Designer. This workaround makes me super happy!

Leave a Reply