При попытке перезагрузить Designer для моего XAML UserControl
я получаю сообщение об ошибке «Ссылка на объект не установлена на экземпляр объекта». Visual Studio выделяет следующую строку как проблему:
<local:TemplateDetail Grid.Row="2" Grid.Column="1" Grid.ColumnSpan="3"
Width="600" TemplateData="{Binding ElementName=cbo_templates,
Path=SelectedItem.Data, Mode=OneWay}"/>
TemplateDetail
- это еще один UserControl
. Когда я смотрю TemplateDetail
, его представление Designer загружается просто отлично, поэтому я не думаю, что там есть проблема. В моем XAML-файле cbo_templates
есть ComboBox
, который содержит экземпляры моего Template
класса, который имеет свойство Data
(отсюда SelectedItem.Data
). Однако, если я удаляю .Data
из Path
в приведенном выше XAML, я все равно получаю ошибку «Ссылка на объект», поэтому я не думаю, что проблема в том, что я пытаюсь получить доступ к свойству Path
в null
. Вот мой ComboBox
XAML на всякий случай:
<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"/>
Получение этой ошибки - реальная проблема, потому что представление Design не загружается, поэтому я не вижу, как выглядит мой UserControl
без запуска приложения. Есть идеи, что может быть не так? Он прекрасно работает, и я не вижу проблем с привязкой в выводе сборки.
Редактировать: вот код конструктора для обоих UserControl
s:
Конструктор UserControl
с ошибкой «Ссылка на объект»:
InitializeComponent();
grd_templateList.DataContext = this; // refers to containing <Grid> in XAML
Конструктор UserControl
Я пытаюсь встроить, тот, чье представление Design загружается нормально:
InitializeComponent();
grd_templateDetail.DataContext = this; // refers to containing <Grid> in XAML
Редактировать: Я пытался поставить проверку if (null != grd_templateList)
в конструкторах перед установкой их DataContext
свойств, но это не помогло - все равно получала ошибку «Ссылка на объект» при перезагрузке конструктора .
Редактировать: свойство List
, используемое ComboBox
, является DependencyProperty
. У меня установлено значение по умолчанию в методе Register
:
public static readonly DependencyProperty ListProperty =
DependencyProperty.Register(
"List",
typeof(List<Template>),
typeof(TemplateList),
new PropertyMetadata(
new List<Template> { _defaultTemplate }
)
);
Даже если я попытаюсь инициализировать List
в конструкторе для моего UserControl
, я все равно получаю сообщение об ошибке при перезагрузке конструктора. Я не думаю, что проблема в том, что List
равно нулю или SelectedItem.Data
- плохой путь.
Редактировать: ладно, даже из-за этого мой конструктор не загружается, выдавая ошибку «Ссылка на объект»:
<local:TemplateDetail Grid.Row="2" Grid.Column="1" Grid.ColumnSpan="3"
TemplateData="{Binding}"/>
Что-то не нравится в том, что свойство TemplateData
связано, по-видимому.
Редактировать: Чтобы добавить к тайне, я могу просмотреть представление «Дизайн» моего общего / основного Window
, которое включает UserControl
, чье представление «Дизайн» дает мне ошибку «Ссылка на объект». O_o