WPF — пример с DataGridComboBoxColumn
-
19-09-2019 - |
Вопрос
Иногда труднее всего найти самые простые примеры...
У меня есть сетка данных с двумя столбцами.Один столбец содержит информацию о роли, другой столбец должен содержать поле со списком доступных пользователей.Данные в поле со списком не связаны с данными в первом столбце.Меня сбивает с толку тот факт, что в поле со списком нет контекста данных, а только источник элемента, и я тоже не могу использовать привязку.
Может ли кто-нибудь указать мне на простой пример, в котором используются два разных набора данных для данных в таблице и поле со списком?
Решение
столбцы в сетке данных не имеют контекста данных, поскольку они никогда не добавляются в визуальное дерево.звучит немного странно, но взгляните блог Винса, у него есть хороший пример визуального макета.после того, как сетка нарисована, ячейки имеют контекст данных, и вы можете установить в них источник элементов со списком, используя обычные привязки (а не статические ресурсы..)
вы можете получить доступ к источнику элементов поля со списком как таковому
<dg:DataGridComboBoxColumn>
<dg:DataGridComboBoxColumn.EditingElementStyle>
<Style TargetType="ComboBox">
<Setter Property="ItemsSource" Value="{Binding Path=MyBindingPath}" />
</Style>
</dg:DataGridComboBoxColumn.EditingElementStyle>
</dg:DataGridComboBoxColumn>
Другие советы
Вместо использования DataGridTextColumns используется DataGridComboBoxColumn.Затем данные заполняются с помощью ItemsSource, который в приведенном ниже примере указывает на внешнее перечисление в статическом ресурсе, и, наконец, привязывается результат к целевому объекту, который будет содержать выбор пользователя в SelectedItemBinding.
<DataGrid.Columns>
<DataGridComboBoxColumn Header="MySelections"
SelectedItemBinding="{Binding MySelectionsProperty}"
ItemsSource="{Binding Source={StaticResource mySelectionsEnum}}" />
</DataGrid.Columns>
Полный пример см. в MSDN по адресу Класс DataGridComboBoxColumn