经过 1.5 天的头疼、消耗咖啡的努力,我终于屈服并呼吁您的明智建议 :)。
我发现了很多关于ComboBox DataBinding
inside 的帖子DataGrid TemplateColumn
,但似乎没有一个对我有帮助。
这是我的问题:
我有一个ViewSource
包含有关 Excel 列信息的对象:列名、列索引和一个包含数据库列信息的对象。
我的第二个ViewSource
是带有数据库列信息的那些对象的列表。
我的目标是加载Excel
a 中的所有列,WPF DataGrid
并ComboBox
在每一行中列出所有数据库列。
当我使用 a 时这很好用DataGridComboBoxColumn
,但我不喜欢用户必须单击 3 次才能打开 ComboBox。无论如何,您需要单击它在视觉上并不是很明显。(好吧,也许我可以设计它)。
所以我把一个正常WPF ComboBox
的,DataGridTemplateColumn
但所有组合框都有 SelectedItem 绑定到 DataGrid.SelectedItem,而不是它们所属的实际行。无论我尝试什么,我都无法让它表现出来!:)
<DataGrid x:Name="ColumnMappings" DataContext="{StaticResource ColumnMappingsViewSource}" ItemsSource="{Binding}" Margin="10,146,10,40" Background="{DynamicResource ControlContainerBackgroundBrush}" BorderBrush="{DynamicResource ControlContainerBorderBrush}" AlternationCount="2" HeadersVisibility="Column" GridLinesVisibility="Horizontal" AutoGenerateColumns="False" SelectionMode="Single" RowBackground="{DynamicResource RowBackGroundBrush}" AlternatingRowBackground="{DynamicResource RowAlternatingBackGroundBrush}" CanUserDeleteRows="False" CanUserAddRows="False">
<DataGrid.Columns>
<DataGridTextColumn Binding="{Binding ColumnName}" ClipboardContentBinding="{x:Null}" Header="Excel Kolom" Width="5*"/>
<DataGridComboBoxColumn ItemsSource="{Binding Source={StaticResource EntityPropertiesViewSource}}" SelectedItemBinding="{Binding EntityProperty}" DisplayMemberPath="DisplayName" Header="Database Kolom" Width="5*"/>
<DataGridTemplateColumn Header="Database Kolom" Width="5*">
<DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<ComboBox DataContext="{Binding RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type DataGrid}}, Path=DataContext}"
ItemsSource="{Binding Source={StaticResource EntityPropertiesViewSource}}"
DisplayMemberPath="DisplayName"
SelectedItem="{Binding EntityProperty}" />
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>
</DataGridTemplateColumn>
</DataGrid.Columns>
</DataGrid>