DataGridComboBoxColumn不显示我的收藏

时间:2014-12-27 23:40:11

标签: c# wpf xaml datagrid combobox

我只是想做一件简单的事情,我只想在数据网格中将我的版本列表显示在一个组合框中。

专栏"版本"显示"收藏" ......我不知道为什么!

这里代码进入我的xaml:

<DataGrid Name="DataGridTableau"  Grid.Column="0" Grid.Row="0"
                  AutoGenerateColumns="False"
                ScrollViewer.CanContentScroll="True" 
                ScrollViewer.VerticalScrollBarVisibility="Auto"
                ScrollViewer.HorizontalScrollBarVisibility="Auto" CanUserAddRows="True"
                ItemsSource="{Binding }"
            >
            <DataGrid.Columns>
                <DataGridTextColumn Header="Sofware" Width="*" IsReadOnly="True" Binding="{Binding Path=Software}">
                </DataGridTextColumn>
                <DataGridComboBoxColumn Header="Version" Width="*" IsReadOnly="True"
                        ItemsSource="{Binding Path=Versions}">
                </DataGridComboBoxColumn>
            </DataGrid.Columns>
        </DataGrid>

进入xaml.cs:

public ObservableCollection<ElementTableau> Elements;

        public VueEtapeSelection()
        {
            InitializeComponent();


            Elements = new ObservableCollection<ElementTableau>();
            List<string> versions = new List<string>();
            versions.Add("3.0");
            versions.Add("3.1");
            Elements.Add(new ElementTableau("Excel", versions));

            this.DataGridTableauEKs.DataContext = Elements;
        }

        public class ElementTableau
        {
            private string sofware;

            public string Software
            {

                get { return software; }
                set { software = value; }
            }

            private List<string> versions;

            public List<string> Versions
            {

                get { return versions; }
                set { versions = value; }
            }

            public ElementTableau(string software, List<string> versions)
            {
                this.software = software;
this.versions=versions

            }
        }

感谢您的帮助!

1 个答案:

答案 0 :(得分:1)

尝试使用样式设置ItemsSource

<DataGrid.Columns>
    <DataGridTextColumn Header="Sofware" Width="*" IsReadOnly="True" Binding="{Binding Path=Software}" />
    <DataGridComboBoxColumn>
        <DataGridComboBoxColumn.ElementStyle>
            <Style TargetType="{x:Type ComboBox}">
                <Setter Property="ItemsSource" Value="{Binding Path=Versions}" />
            </Style>
        </DataGridComboBoxColumn.ElementStyle>
        <DataGridComboBoxColumn.EditingElementStyle>
            <Style TargetType="{x:Type ComboBox}">
                <Setter Property="ItemsSource" Value="{Binding Path=Versions}" />
            </Style>
        </DataGridComboBoxColumn.EditingElementStyle>
    </DataGridComboBoxColumn>
</DataGrid.Columns>

绑定列的ItemsSource属性不起作用,因为它是在没有父FrameworkElement的列本身的上下文中计算的。使用样式代替在渲染ComboBox时设置ItemsSource。 ComboBox集成在逻辑树中,可以评估其DataContext,这就是它的工作原理。

修改

要绑定所选项目,请添加以下内容:

<Setter Property="SelectedItem" Value="{Binding Path=SelectedVersion}" />