DataGridComboBoxes显示组合框选项但不显示文本

时间:2012-03-15 20:32:38

标签: c# .net wpf binding datagrid

我的应用程序有两个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单元格以显示组合框时,将填充正确的值。但是当我没有选择单元格时,我应该看到这个值。也许我很天真,但我认为这个专栏应该以某种方式显示其价值,而不是作为一个专注的组合框。

1 个答案:

答案 0 :(得分:2)

因为只有EditingElementStyle有一个ItemsSource。当你想要一个ComboBox的基本编辑功能时,为什么你有一个单独的EditingElementStyle?