Я получаю ошибку "Ссылка на объект, не установленную на экземпляр объекта" при попытке перезагрузить конструктор для моего 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
, его представление конструктора загружается просто отлично, поэтому я не думаю, что там есть проблема. В моем XAML с именем cbo_templates
есть ComboBox
, который содержит экземпляры моего класса Template
, который имеет свойство Data
(следовательно, SelectedItem.Data
). Однако, если я удаляю .Data
из Path
в вышеупомянутом XAML, я все равно получаю ошибку "Ссылка на объект" , поэтому я не думаю, что проблема в том, что я пытаюсь получить доступ к свойству Path
на null
. Здесь my 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
, не запуская приложение. Любая идея, что может быть неправильным? Он строит отлично, и я не вижу никаких проблем с привязкой в Build Output.
Изменить: вот код конструктора для UserControl
s:
Конструктор UserControl
с ошибкой "Ссылка на объект" :
InitializeComponent();
grd_templateList.DataContext = this; // refers to containing <Grid> in XAML
Конструктор UserControl
Я пытаюсь вставить, тот, чей вид дизайна загружается нормально:
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
имеет значение null или SelectedItem.Data
является плохим путем.
Изменить: в порядке, даже если это не приводит к тому, что мой конструктор не загружается, что дает ошибку "Ссылка на объект" :
<local:TemplateDetail Grid.Row="2" Grid.Column="1" Grid.ColumnSpan="3"
TemplateData="{Binding}"/>
Есть что-то, что не нравится в отношении свойства TemplateData
, связанного, по-видимому.
Изменить:, чтобы добавить в тайну, я могу просмотреть представление "Дизайн" моего общего/основного Window
, который включает в себя UserControl
, в представлении "Дизайн" появляется сообщение об ошибке "Ссылка на объект" , O_o