我的应用程序有两个WPF 4 DataGrids。第一个允许用户指定一个或多个配置文件。第二列应该有一列,用户可以在其中从第一个表中选择一个条目(按名称选择)。
我已选择在第二个表中使用DataGridComboBoxColumn列出第一个行中的行(并按名称显示它们)。
我已经实现了一个WPF DataGrid,如下所示:
<DataGrid x:Name="TimePeriodDataGrid" Grid.RowSpan="2" Margin="0 5 5 0"
ItemsSource="{Binding TimePeriodCollection}"
SelectionChanged="TimePeriodDataGrid_SelectionChanged"
AutoGenerateColumns="False"
CanUserAddRows="False"
CanUserDeleteRows="True"
CanUserReorderColumns="False"
CanUserResizeColumns="True"
CanUserResizeRows="False">
<DataGrid.Columns>
<DataGridTextColumn Header="Year" Binding="{Binding Year}"/>
<DataGridTextColumn Header="Start Date" Binding="{Binding Path=Start, StringFormat={}{0:MMMM d}}" />
<DataGridTextColumn Header="End Date" Binding="{Binding Path=End, StringFormat={}{0:MMMM d}}" />
<DataGridComboBoxColumn Header="Configuration File"
SelectedItemBinding="{Binding ConfigFile.Name}"
TextBinding="{Binding ConfigFile.Name}"
<DataGridComboBoxColumn.EditingElementStyle>
<Style TargetType="ComboBox">
<Setter Property="ItemsSource" Value="{Binding RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type Window}}, Path=ConfigFileCollection, Mode=OneWay}" />
</Style>
</DataGridComboBoxColumn.EditingElementStyle>
</DataGridComboBoxColumn>
</DataGrid.Columns>
</DataGrid>
当组合框未激活时,组合框列中没有文字出现!我认为这是SelectedItemBinding和TextBinding之间的区别。然而,SelectedItemBinding似乎工作得很好(单击组合框以激活它显示正确的值)。并且它们具有完全相同的DataContext和Binding,所以我不确定它是如何工作的而另一个不是。
此外,控制台中没有通知表明TextBinding发生错误。
是否与我声明了EditingElementStyle而不是ElementStyle有关? (如果是的话,如何设置TextBlockComboBox.Text,因为它似乎受到WPF的保护?)
关于我可能遗失的任何其他建议?
编辑17:23 EDT :我删除了TextBinding条目,我看到TextBinding是Combobox在屏幕上显示但是“折叠”而不删除选项列表时显示的内容。这显示正确。
因此,我的问题是,当光标远离它时,用什么属性来表示字段的值?当我单击DataGrid单元格以显示组合框时,将填充正确的值。但是当我没有选择单元格时,我应该看到这个值。也许我很天真,但我认为这个专栏应该以某种方式显示其价值,而不是作为一个专注的组合框。
答案 0 :(得分:2)
因为只有EditingElementStyle有一个ItemsSource。当你想要一个ComboBox的基本编辑功能时,为什么你有一个单独的EditingElementStyle?