2012-03-13 5 views
0

나는 다음과 같이 정의 된 클래스가 실패 창문에. 예를 들어객체의 생성자의 속성을 사용하여이

다음

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

이유이며 어떻게 내가 때에 프로퍼티 및 사용을 확인할 수 있습니다 내 생성자에서 나는이 값을 확인하려고하면

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

가 예외를 일으킬 것 그것? XAML에 정의

+0

예외의 종류는 무엇입니까? 그 메시지는 무엇을 말합니까? – Abbas

답변

2

객체는 속성이 설정되어 다음 기본 생성자를 사용하여 구성됩니다. 당신이 ToString()를 호출 할 때 따라서 당신이 NullReferenceException을 받고,

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

Tag는 생성자 내부 null 왜 그것은 지금 명백해야한다 :

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

이 도덕적으로 동일합니다 : 그래서이 것을 상상한다.

계속해서 설정중인 개체 속성에 따라 생성자 내에서 무언가를하는 고전적인 모델을 사용할 수 없습니다. 목표를 달성하기위한 또 다른 방법을 찾아야합니다. 목표가 정확히 무엇인지에 따라 달라집니다 (예 : INotifyPropertyChanged을 사용하여 속성이 설정되었음을 감지하거나 나중에 속성이 설정되었음을 감지 할 수 있음). 비주얼의 수명과 거기에서 값을 가져옵니다).

+0

당신의 설명을 이해합니다. "태그"에 대한 설명은 객체에 대한 정보를 전달하는 데 사용됩니다. 저장하고 나중에 프로그램의 일부 경로를 확인하기 위해 확인하고 싶습니다. 그것을 사용하고 싶을 때마다 그것을 확인하는 것이 더 똑똑할까요? 더 효과적인 방법이 있습니까? – Programer

+0

@meyou : 매번 다른 속성과 마찬가지로 사용할 때마다 확인하는 것이 더 정확할 것입니다. – Jon

+0

그래,하지만 나는 잡을 시도가 필요할 때마다, 그래서 채워지지 않으면 나는 기본값을 사용할 것이다. 그것은 많은 기능에서 중복을 만들었습니다. 아프지 않을 때마다 항상 반환 할 함수를 사용하십시오. – Programer

2

XAML에서 속성을 설정하면 생성자에서 설정되지 않습니다. 이 작업을 수행하려면 OnLoaded 재정의를 사용하십시오.

+0

오버 라이드 할 수있는이 속성 (OnLoaded)이 없습니다. 어떻게해야합니까? – Programer

관련 문제