Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/302.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 在对象的构造函数中使用属性失败_C#_Wpf_Xaml_Constructor - Fatal编程技术网

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

C# 在对象的构造函数中使用属性失败,c#,wpf,xaml,constructor,C#,Wpf,Xaml,Constructor,我有一个这样定义的类: class TouchScreenDisabledGrid:DataGrid,INotifyPropertyChanged 我想改变我的类行为在它的属性上的定义,这些属性是在窗口中使用xaml时设置的 例如: <my:TouchScreenDisabledGrid x:Name="dataGridView" Tag="13" /> 这是为什么?我如何检查属性并使用它?XAML中定义的对象使用默认构造函数构造,然后设置它们的属性。想象一下: <my:

我有一个这样定义的类:

class TouchScreenDisabledGrid:DataGrid,INotifyPropertyChanged
我想改变我的类行为在它的属性上的定义,这些属性是在窗口中使用xaml时设置的

例如:

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

这是为什么?我如何检查属性并使用它?

XAML中定义的对象使用默认构造函数构造,然后设置它们的属性。想象一下:

<my:TouchScreenDisabledGrid x:Name="dataGridView" Tag="13"  />
现在应该很清楚为什么
Tag
在构造函数中是
null
,因此当调用
ToString()
时,您会得到一个
NullReferenceException


继续下去,您不能使用经典模型在构造函数内部执行依赖于所设置对象属性的操作。您必须找到实现目标的另一种方式——具体方式取决于目标的具体内容(例如,您可以使用
INotifyPropertyChanged
来检测已设置的属性;或者您可以侦听在视频生命周期中稍后触发的事件并从中获取值).

使用默认构造函数构造XAML中定义的对象,然后设置它们的属性。想象一下:

<my:TouchScreenDisabledGrid x:Name="dataGridView" Tag="13"  />
现在应该很清楚为什么
Tag
在构造函数中是
null
,因此当调用
ToString()
时,您会得到一个
NullReferenceException


继续下去,您不能使用经典模型在构造函数内部执行依赖于所设置对象属性的操作。您必须找到实现目标的另一种方式——具体方式取决于目标的具体内容(例如,您可以使用
INotifyPropertyChanged
来检测已设置的属性;或者您可以侦听在视频生命周期中稍后触发的事件并从中获取值).

如果属性是在XAML中设置的,则不会在构造函数中设置。使用OnLoaded override执行此操作。

如果在XAML中设置了属性,则不会在构造函数中设置该属性。使用onload override执行此操作。

您会遇到什么样的异常?消息上说了什么?你得到了什么样的异常?留言说什么?我理解你的解释。对于“标记”的描述,它用于传递有关对象的信息。我想保存它,并在以后检查它,以确定程序中的某些路径。每次我想用它的时候检查它会更聪明吗?有没有更有效的方法?@meyou:每次你想使用它时(就像其他任何属性一样)检查它肯定会更正确。是的,但每次我需要一个try-catch东西时,如果它没有被填充,我会使用默认值。它使许多功能重复。没关系,我会使用一个每次我理解你的解释时都会返回的函数。对于“标记”的描述,它用于传递有关对象的信息。我想保存它,并在以后检查它,以确定程序中的某些路径。每次我想用它的时候检查它会更聪明吗?有没有更有效的方法?@meyou:每次你想使用它时(就像其他任何属性一样)检查它肯定会更正确。是的,但每次我需要一个try-catch东西时,如果它没有被填充,我会使用默认值。它使许多功能重复。别介意,我会使用一个每次都会返回它的函数,它没有我可以覆盖的这个属性(onload)。我怎么能做到呢?它没有我可以覆盖的这个属性(onload)。我怎么才能做到呢?
var g = new TouchScreenDisabledGrid();
g.Name = "dataGridView";
g.Tag = "13";