Указатель NULL
- это тот, который указывает на никуда. Когда вы разыскиваете указатель p
, вы говорите «дайте мне данные в месте, хранящемся в« p ». Когда p
является нулевым указателем, местоположение, хранящееся в p
, является nowhere
, вы говорите «Дайте мне данные в месте« нигде ». Очевидно, он не может этого сделать, поэтому он выбрасывает NULL pointer exception
.
В общем, это потому, что что-то не было правильно инициализировано.
Вы не можете Связать с Заголовком, потому что это не FrameworkElement. Можно сделать текст динамичным путем изменения Шаблона Заголовка как это:
xmlns:data="clr-namespace:System.Windows.Controls;assembly=System.Windows.Controls.Data"
xmlns:dataprimitives="clr-namespace:System.Windows.Controls.Primitives;assembly=System.Windows.Controls.Data"
<data:DataGridTemplateColumn>
<data:DataGridTemplateColumn.HeaderStyle>
<Style TargetType="dataprimitives:DataGridColumnHeader">
<Setter Property="Template">
<Setter.Value>
<ControlTemplate>
<TextBlock Text="{Binding MeetingName, Source={StaticResource LocStrings}}" />
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
</data:DataGridTemplateColumn.HeaderStyle>
</data:DataGridTemplateColumn>
У меня есть решение для привязка. Поскольку вы используете DataGridTemlateColumn, создайте для него подкласс и добавьте свойство типа Binding с именем экземпляра «HeaderBinding». Теперь вы можете выполнить привязку к этому свойству из XAML. Затем вы должны распространить привязку на TextBlock в DataTemplate вашего заголовка. Например, вы можете сделать это с помощью события OnLoaded этого TextBlock.
HeaderTextBlock.SetBinding(TextBlock.TextProperty, HeaderBinding);
Вот и все. Если у вас больше столбцов и вы хотите использовать только один DataTemplate, это немного сложнее, но идея та же.
Почему бы просто не задать это в коде:
dg1.Columns[3].Header = SomeDynamicValue;