【发布时间】:2012-04-22 10:33:13
【问题描述】:
当我尝试为我的 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)。但是,如果我从上述 XAML 中的 Path 中删除 .Data,我仍然会收到“对象引用”错误,所以我认为问题不在于我正在尝试访问 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"/>
出现此错误是一个真正的问题,因为无法加载设计视图,所以如果不运行应用程序,我看不到我的 UserControl 的样子。知道有什么问题吗?它构建良好,我在构建输出中看不到任何绑定问题。
编辑:这是UserControls 的构造函数代码:
UserControl 的构造函数出现“对象引用”错误:
InitializeComponent();
grd_templateList.DataContext = this; // refers to containing <Grid> in XAML
UserControl 的构造函数我正在尝试嵌入,其设计视图加载正常:
InitializeComponent();
grd_templateDetail.DataContext = this; // refers to containing <Grid> in XAML
编辑:我尝试在构造函数中设置 DataContext 属性之前检查 if (null != grd_templateList),但这并没有帮助 - 重新加载时仍然出现“对象引用”错误设计师。
编辑:ComboBox 使用的List 属性是DependencyProperty。我在Register 方法中设置了默认值:
public static readonly DependencyProperty ListProperty =
DependencyProperty.Register(
"List",
typeof(List<Template>),
typeof(TemplateList),
new PropertyMetadata(
new List<Template> { _defaultTemplate }
)
);
即使我尝试在我的UserControl 的构造函数中初始化List,在重新加载设计器时我仍然会收到错误消息。我认为问题不在于 List 为 null 或 SelectedItem.Data 是错误路径。
编辑:好的,即使只是这样做也会导致我的设计器无法加载,从而出现“对象引用”错误:
<local:TemplateDetail Grid.Row="2" Grid.Column="1" Grid.ColumnSpan="3"
TemplateData="{Binding}"/>
显然,它不喜欢 TemplateData 属性被绑定。
编辑:更神秘的是,我可以查看我的整体/主要Window 的设计视图,其中包括UserControl,其设计视图给了我“对象引用”错误. O_o
【问题讨论】:
-
两个用户控件的构造函数中是否有代码?
-
@Goblin:更新了我的问题以显示构造函数代码。
标签: .net wpf visual-studio-2010 xaml