我有一个像这样定义的类:
class TouchScreenDisabledGrid:DataGrid,INotifyPropertyChanged
我想改变我的类行为的soome,并在它的属性上删除它,在窗口中使用它时设置了xaml。
例如以下内容:
<my:TouchScreenDisabledGrid x:Name="dataGridView" Tag="13" />
如果在我的构造函数中我尝试检查此值,将导致异常:
public TouchScreenDisabledGrid(){
Console.WriteLine(this.Tag.ToString());
}
为什么这样,我如何检查并使用它?
答案 0 :(得分:2)
XAML中定义的对象是使用默认构造函数构建的,然后然后设置它们的属性。所以想象一下:
<my:TouchScreenDisabledGrid x:Name="dataGridView" Tag="13" />
道德等同于此:
var g = new TouchScreenDisabledGrid();
g.Name = "dataGridView";
g.Tag = "13";
现在应该明白为什么Tag
在你的构造函数中是null
,因此当你调用NullReferenceException
时,你得到ToString()
。
继续进一步说,你不能在构造函数中使用依赖于所设置的对象属性的经典模型。您必须找到另一种实现目标的方法 - 取决于目标的确切方式(例如,您可以使用INotifyPropertyChanged
来检测已设置的属性;或者您可以收听在视觉的生命周期中稍后触发,并从那里获取值。
答案 1 :(得分:2)
如果在XAML中设置了属性,则不会在构造函数中设置该属性。使用OnLoaded覆盖来执行此操作。