在对象的构造函数中使用的属性失败
问题描述:
我有这样定义的类:在对象的构造函数中使用的属性失败
class TouchScreenDisabledGrid:DataGrid,INotifyPropertyChanged
我想改变soome我的类的行为depanding它的属性,被设置投掷了XAML使用时它在一个窗口中。
例如以下:
<my:TouchScreenDisabledGrid x:Name="dataGridView" Tag="13" />
将导致异常,如果在我的构造函数中我尝试检查该值:
public TouchScreenDisabledGrid(){
Console.WriteLine(this.Tag.ToString());
}
这是为什么,我怎么能检查的属性格式和使用它?
答
在XAML中定义的对象是使用默认构造函数和然后构建的,它们的属性已设置。因此,可以想象,这样的:
<my:TouchScreenDisabledGrid x:Name="dataGridView" Tag="13" />
是这种道德等价的:
var g = new TouchScreenDisabledGrid();
g.Name = "dataGridView";
g.Tag = "13";
现在应该是显而易见的,为什么Tag
是null
你的构造函数中,因此你得到一个NullReferenceException
当你调用ToString()
。
进一步继续,您不能使用做那要看对象的属性被设置在构造函数中的东西的经典模型。你必须找到实现目标的另一种方式 - 什么样的方式,依赖于完全的目标是什么(例如,你可以使用INotifyPropertyChanged
来检测属性已经设置,或者您可以收听到的是,在后触发事件视觉的生命周期并从中获取值)。
答
如果该属性在XAML中设置它不会在构造函数中设置。使用OnLoaded覆盖来执行此操作。
+0
它没有我可以覆盖的属性(OnLoaded)。我该如何解决这个问题? – Programer 2012-03-13 10:11:14
你会得到什么样的例外?信息说什么? – Abbas 2012-03-13 10:01:32