Использовать свойство в конструкторе объекта не удается - PullRequest
0 голосов
/ 13 марта 2012

У меня есть определенный класс:

class TouchScreenDisabledGrid:DataGrid,INotifyPropertyChanged

Я хочу изменить некоторые параметры поведения моего класса в зависимости от его свойств, которые устанавливаются через xaml при использовании его в окне.

Например, следующее:

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

Вызовет исключение, если в моем конструкторе я попытаюсь проверить это значение:

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

Почему это так и как я могу проверить правильность и использовать ее?

Ответы [ 2 ]

2 голосов
/ 13 марта 2012

Если свойство установлено в XAML, оно не будет установлено в конструкторе.Для этого используйте переопределение OnLoaded.

2 голосов
/ 13 марта 2012

Объекты, определенные в XAML, создаются с использованием конструктора по умолчанию и , затем устанавливаются их свойства.Итак, представьте, что это:

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

Моральный эквивалент этого:

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

Теперь должно быть очевидно, почему Tag это null внутри вашего конструктора, следовательно, выполучение NullReferenceException при вызове ToString().

Продолжая далее, вы не можете использовать классическую модель выполнения чего-либо внутри конструктора, которая зависит от устанавливаемых свойств объекта.Вы должны найти другой способ достижения своей цели - каким образом, зависит от того, что именно является целью (например, вы можете использовать INotifyPropertyChanged, чтобы обнаружить, что свойство установлено; или вы можете прослушать событие, которое запускается позжев жизни визуального и получить значения оттуда).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...