在对象的构造函数中使用属性失败
本文关键字:属性 失败 对象 构造函数 | 更新日期: 2023-09-27 18:27:31
我有一个这样定义的类:
class TouchScreenDisabledGrid:DataGrid,INotifyPropertyChanged
我想根据它的属性来改变我的类行为,这些属性是在窗口中使用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
,因此在调用ToString()
时会得到一个NullReferenceException
。
继续,您不能使用经典的模型在构造函数中执行依赖于所设置的对象属性的操作。你必须找到另一种实现目标的方法——什么方法取决于目标的具体内容(例如,你可以使用INotifyPropertyChanged
来检测属性是否已设置;或者你可以监听在视觉生命周期后期触发的事件,并从中获取值)。
如果属性是在XAML中设置的,则不会在构造函数中设置。使用OnLoaded覆盖可以执行此操作。