Я получаю ошибку "Ссылка на объект, не установленную на экземпляр объекта" при попытке перезагрузить конструктор для моего 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
