I'm getting an "Object reference not set to an instance of an object" error when I try to reload the Designer for my XAML UserControl
. Visual Studio highlights the following line as being the problem:
<local:TemplateDetail Grid.Row="2" Grid.Column="1" Grid.ColumnSpan="3"
Width="600" TemplateData="{Binding ElementName=cbo_templates,
Path=SelectedItem.Data, Mode=OneWay}"/>
TemplateDetail
is another UserControl
. When I view TemplateDetail
, its Designer view loads just fine, so I don't think there's a problem there. There is a ComboBox
in my XAML named cbo_templates
that contains instances of my Template
class, which has a Data
property (hence SelectedItem.Data
). However, if I remove .Data
from the Path
in the above XAML, I still get the "Object reference" error, so I don't think the problem is that I'm trying to access the Path
property on null
. Here's my ComboBox
XAML just in case:
<ComboBox ItemsSource="{Binding Path=List}" Grid.Row="1" Grid.Column="3"
VerticalAlignment="Center" x:Name="cbo_templates" Width="250"
HorizontalAlignment="Left" DisplayMemberPath="Name"
SelectedValuePath="Name" SelectedIndex="0"/>
Getting this error is a real problem because the Design view won't load, so I can't see what my UserControl
looks like without running the app. Any idea what could be wrong? It builds fine and I don't see any binding problems in the Build Output.
Edit: here is the constructor code for both UserControl
s:
Constructor of UserControl
with "Object reference" error:
InitializeComponent();
grd_templateList.DataContext = this; // refers to containing <Grid> in XAML
Constructor of UserControl
I'm trying to embed, the one whose Design view loads okay:
InitializeComponent();
grd_templateDetail.DataContext = this; // refers to containing <Grid> in XAML
Edit: I tried putting an if (null != grd_templateList)
check in the constructors before setting their DataContext
properties, but that didn't help--still getting the "Object reference" error when reloading the Designer.
Edit: the List
property that the ComboBox
uses is a DependencyProperty
. I have a default value set in the Register
method:
public static readonly DependencyProperty ListProperty =
DependencyProperty.Register(
"List",
typeof(List<Template>),
typeof(TemplateList),
new PropertyMetadata(
new List<Template> { _defaultTemplate }
)
);
Even if I try to initialize List
in the constructor for my UserControl
, I still get the error when reloading the Designer. I don't think the problem is that List
is null or SelectedItem.Data
is a bad path.
Edit: okay, even just having this causes my Designer to not load, giving the "Object reference" error:
<local:TemplateDetail Grid.Row="2" Grid.Column="1" Grid.ColumnSpan="3"
TemplateData="{Binding}"/>
There is something it dislikes about the TemplateData
property being bound, apparently.
Edit: to add to the mystery, I can view the Design view of my overall/main Window
, which includes the UserControl
whose Design view gives me the "Object reference" error. O_o
See Question&Answers more detail:
os