在对象的构造函数中使用的属性失败

问题描述:

我有这样定义的类:在对象的构造函数中使用的属性失败

class TouchScreenDisabledGrid:DataGrid,INotifyPropertyChanged 

我想改变soome我的类的行为depanding它的属性,被设置投掷了XAML使用时它在一个窗口中。

例如以下:

<my:TouchScreenDisabledGrid x:Name="dataGridView" Tag="13" /> 

将导致异常,如果在我的构造函数中我尝试检查该值:

public TouchScreenDisabledGrid(){ 
      Console.WriteLine(this.Tag.ToString()); 
    } 

这是为什么,我怎么能检查的属性格式和使用它?

+0

你会得到什么样的例外?信息说什么? – Abbas 2012-03-13 10:01:32

在XAML中定义的对象是使用默认构造函数然后构建的,它们的属性已设置。因此,可以想象,这样的:

<my:TouchScreenDisabledGrid x:Name="dataGridView" Tag="13" /> 

是这种道德等价的:

var g = new TouchScreenDisabledGrid(); 
g.Name = "dataGridView"; 
g.Tag = "13"; 

现在应该是显而易见的,为什么Tagnull你的构造函数中,因此你得到一个NullReferenceException当你调用ToString()

进一步继续,您不能使用做那要看对象的属性被设置在构造函数中的东西的经典模型。你必须找到实现目标的另一种方式 - 什么样的方式,依赖于完全的目标是什么(例如,你可以使用INotifyPropertyChanged来检测属性已经设置,或者您可以收听到的是,在后触发事件视觉的生命周期并从中获取值)。

+0

我了解你的解释。对于“标签”的描述,它用于传递关于对象的信息。我想保存它并稍后检查以确定程序中的某个路径。每次我想使用它时检查它会更聪明吗?有更好的方式吗? – Programer 2012-03-13 10:09:57

+0

@meyou:每次你想使用它时都会检查它是否正确(就像其他任何属性一样)。 – Jon 2012-03-13 10:15:54

+0

是的,但每次我需要一个尝试抓住的东西,所以如果它没有填充,我会使用默认值。它在许多功能上起了重复作用。没关系,不要介意每次都会返回的函数 – Programer 2012-03-13 10:17:44

如果该属性在XAML中设置它不会在构造函数中设置。使用OnLoaded覆盖来执行此操作。

+0

它没有我可以覆盖的属性(OnLoaded)。我该如何解决这个问题? – Programer 2012-03-13 10:11:14