Это потому, что DataGridComboBoxColumn
не является элементом пользовательского интерфейса, а ComboBox
- это.
В первом примере, поскольку ваш ComboBox
является частью визуального дерева, RelativeSource
может делать то, что должен: ходить по дереву пользовательского интерфейса в поисках запрашиваемого вами элемента. Но во втором примере DataGridComboBoxColumn
- это DependencyObject
, но это не фактический элемент пользовательского интерфейса - это объект, который описывает что-то об элементе пользовательского интерфейса.
Вы можете вместо этого попробовать ElementName
и дать имя своему корневому окну. Или вы можете сойти с рук просто:
<DataGridComboBoxColumn ...
ItemsSource="{Binding Path=Suppliers}" />
DataContext
будет перетекать из окна в сетку, поэтому, если вы не переопределите его чем-то другим в этой точке пользовательского интерфейса, он все равно будет доступен.
Или, если это не сработает, вы можете добавить соответствующую коллекцию в словарь ресурсов, чтобы получить ее с Source={StaticResource suppliers}
в привязке.