views:

125

answers:

1

Hi All,

I'm tryihg to bind a combobox item source to a static resource. I'm oversimplfying my example so that it's easy to understand what i'm doing.

So I have created a class

public class A : ObservableCollection<string>
{
  public A()
  {
     IKBDomainContext Context = new IKBDomainContext();
        Context.Load(Context.GetIBOptionsQuery("2C6C1Q"), p =>
        {
            foreach (var item in SkinContext.IKBOptions)
            {
                this.Add(item);
            }
        }, null);
  }
}

So the class has a constructor that populates itself using a domaincontext that gets data from a persisted database. I'm only doing reads on this list so dont have to worry about persisting back.

in xaml i add a reference to the namespace of this class then I add it as a usercontrol.resources to the page control.

<UserControl.Resources>
    <This:A x:Key="A"/>
</UserControl.Resources>

and then i use it this staticresource to bind it to my combobox items source.in reality i have to use a datatemplate to display this object properly but i wont add that here.

<Combobox ItemsSource="{StaticResource A}"/>

Now when I'm in the designer I get the error:

Cannot Create an Instance of "A".

If i compile and run the code, it runs just fine. This seems to only affect the editing of the xaml page.

What am I doing wrong?

+1  A: 

When running in the designer the full application runtime is not available. However the designer doesn't just magically know how to mock the UI of a UserControl. Its Xaml is parsed and the objects described there are instantiated.

Its up to you to code your classes to cope with existence in a designer. You can use the static proeprty DesignerProperties.IsInDesignTool to determine if your code is currently being used in a designer tool or not.

If in a designer you could deliver a set of test data rather than attempt to access a data service.

AnthonyWJones
Thank! I thought that was the problem! Thank you.
Mike Bynum