Связывание в текстовом столбце таблицы данных WPF

Я пытаюсь построить сетку данных, где один из столбцов – это имя шрифта, отображаемое в этом шрифте. Раньше я работал со списком, в котором я определил следующий шаблон:

 

Это сработало отлично. Итак, я изменил структуру данных (Name стал Font.Name) и перешел на сетку данных, чтобы попробовать следующее:

  

Теперь имена шрифтов отображаются в шрифте по умолчанию, и я получаю эту ошибку:

 System.Windows.Data Error: 2 : Cannot find governing FrameworkElement or FrameworkContentElement for target element. BindingExpression:Path=Font.Name; DataItem=null; target element is 'DataGridTextColumn' (HashCode=56915998); target property is 'FontFamily' (type 'FontFamily') 

Несколько результатов Google, посвященных настраиваемым элементам управления, предлагают изменить свойство DependencyObject на FrameworkElement, но мне пришлось бы наследовать DataGridTextColumn и определить мое собственное свойство, чтобы сделать это – должен быть лучший способ.

Я пробовал несколько разных подходов к привязке, включая попытку изменить только размер шрифта с отдельным свойством в моем classе данных (например, FontSize="{Binding FontSize}" ). Все они привели к той же ошибке, что и выше.

Кто-нибудь знает, что я здесь делаю неправильно?

Редактировать:

Благодаря ответу Джареда, я нашел следующее:

http://blogs.msdn.com/jaimer/archive/2008/11/22/forwarding-the-datagrid-s-datacontext-to-its-columns.aspx

Метод выглядит здорово, но мне нужно сделать привязку, которая ссылается на правильный элемент в DataContext для каждой строки, а не на разделение одного значения для всего столбца.

Код позади:

 fontDataGrid.DataContext = from font in new InstalledFontCollection().Families; 

XAML:

 Binding="{Binding Font.Name}" FontFamily="{Binding (FrameworkElement.DataContext).Font.Name, RelativeSource={x:Static RelativeSource.Self}}" 

Использование вышеуказанного XAML явно неверно, поскольку DataContext – это весь набор шрифтов. Но я не могу индексировать коллекцию, так как я не знаю, что это за номер строки (или я?). Есть ли какой-то подход, который я могу использовать для достижения этого?

И второстепенный вопрос: почему атрибут Binding работает нормально, даже без DataContext? Он смотрит на ItemsSource вместо этого?

Ответ Джареда правильный, но я нашел конкретное решение, которое решило мою проблему.

http://blogs.msdn.com/vinsibal/archive/2008/12/17/wpf-datagrid-dynamically-updating-datagridcomboboxcolumn.aspx

Следуя этому примеру, я изменил определение DataGridTextColumn на:

      

И мне не нужно беспокоиться о столбце, наследующем DataContext. Это дает мне результат, который я хочу.

Пытаться

 TextBlock.FontFamily="{Binding Font.Name}" 

Иногда в системе привязки возникает проблема, когда объявляется свойство, поэтому вам нужно дать ему некоторую помощь.

  • Связывание со статическим свойством
  • Кто-нибудь знает набор привязок C # для FFMPEG?
  • MvvmCross Android - альтернатива привязке RelativeSource для команды button
  • Пользовательское связующее устройство DateTime в Asp.net MVC
  • Ошибка WPF 40 Ошибка BindingExpression path: свойство не найдено в 'объекте'
  • Связывание WPF DataGrid с DataTable с использованием TemplateColumns
  • Как форматировать столбцы DateTime в DataGridView?
  • WPF StringFormat на содержании ярлыков
  • ComboBox.SelectedValue не обновляется из источника привязки
  • Как повысить свойства Измененные события в зависимости от свойства?
  • Конфликты Datacontext
  • Давайте будем гением компьютера.