Большое усиление, которое можно получить от свойства (частный, общедоступный...) - то, что оно может произвести расчетное значение по сравнению с установленным значением. Например
class Person {
private DateTime _birthday;
private int _age { get { return (DateTime.Now - _birthday).TotalYears; }
}
преимущество этого шаблона состоит в том, что только одно значение должно быть обновлено для N другие значения для отражения изменения. Это верно для свойств независимо от доступности. Нет никакого определенного преимущества частной собственности по сравнению с нечастной собственностью (кроме него являющийся частным, конечно)
** РЕДАКТИРОВАТЬ: -
Вы можете стилизовать DataGridColumnHeader и выполнить некоторые фанковые привязки. попробуйте здесь и загрузите ColumnHeaderBindings.zip, у него есть небольшой тестовый проект, это вроде взлома, но он работает
** End Edit
Binding в столбце происходит из расчета на строку , столбец не является частью визуального дерева, привязка применяется к каждому элементу в сетке, из исходного кода сетки вы можете видеть, что свойство Binding содержит эти комментарии
/// <summary>
/// The binding that will be applied to the generated element.
/// </summary>
/// <remarks>
/// This isn't a DP because if it were getting the value would evaluate the binding.
/// </remarks>
Таким образом, привязка к столбцам не имеет большого смысла, потому что, как вы выяснили, когда вы не являетесь частью визуального дерева, у вас нет контекста данных.
Та же проблема существует с ComboBoxColumn, когда вы хотите выполнить привязку к источнику элементов. Вы можете выполнить привязку к StaticResource, но у StaticResources нет контекста данных. Вы можете использовать поставщик данных объекта или просто создать экземпляр непосредственно в xaml.
, но я бы просто создал столбцы в коде и установил заголовок. тогда эта проблема просто исчезнет.
есть хорошая статья здесь о визуальной компоновке.
Кстати, в Silverlight (проверено с SL 3.0 ) вы можете просто использовать свойство Header в качестве DataContext для ControlTemplate , установленного с помощью HeaderStyle (см. мой вопрос, связанный с по SO ).
Я только что попробовал это решение в WPF 3.5, используя WPF Toolkit DataGrid и , оно работает !