經過1.5天的頭疼,喝咖啡的努力,我最終放棄並呼籲您提出明智的建議:)。DataGridTemplateColumn中的ComboBox.SelectedItem不綁定到它自己的DataGridRow
我在DataGrid TemplateColumn
裏發現了不少關於ComboBox DataBinding
的帖子,但是他們沒有一個似乎幫助我。
這是我的問題:
我有一個包含有關Excel列信息對象ViewSource
: 列名,列索引與數據庫列的信息的對象。
我的第二個ViewSource
是具有數據庫列信息的那些對象的列表。
我的目標是加載WPF DataGrid
中的所有Excel
列,並在列出所有數據庫列的每行中都有一個ComboBox
。
這個工作正常,當我使用DataGridComboBoxColumn
,但我不喜歡用戶不得不點擊3次打開組合框。無論如何,你需要點擊它,這在視覺上並不明顯。 (好吧,我可以設計它)。
所以我把一個正常的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>
刪除組合框上的'DataContext'。 'EntityProperty'駐留在當前行的DataContext中,而不是DataGrid的DataContex中。不是嗎? – 2013-03-24 08:18:23
這是我第一次嘗試(它確實與複選框一起工作)。但是,當我在這裏刪除DataContext時,所有框仍然獲得相同的值,當我改變其中一個,現在實際行甚至沒有更新(dataGridcomboboxcolumn不會更改)。 :( – ivanv 2013-03-24 13:09:31
在其他帖子中,我讀過ComboBox ItemSource「覆蓋」DataContext。我最好的猜測是我需要指定正確的DataContext(行中的一個),但我不知道該在哪裏指出它...'AncestorType = {x:Type DataGridRow}'不起作用... – ivanv 2013-03-24 13:15:25