【发布时间】:2012-04-01 10:23:30
【问题描述】:
我的应用程序有两个 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 单元格以显示组合框时,将填充正确的值。但是当单元格未被选中时,我应该会看到该值。也许我很天真,但我认为此列在不作为焦点组合框处于活动状态时应该以某种方式显示其值。
【问题讨论】:
-
请参阅stackoverflow.com/questions/9319662/… 以获取数据绑定 DataGridComboBoxColumn 的示例。 SO上还有很多其他的。
-
感谢您的评论,菲尔;我经历了很多。自从我发布原始问题以来,我进行了更多测试,问题发生了一些变化。
标签: c# .net wpf binding datagrid