【问题标题】:DataGridComboBoxColumn doesn't display my collectionDataGridComboBoxColumn 不显示我的收藏
【发布时间】:2015-02-24 16:07:41
【问题描述】:

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

“版本”列显示“收藏”...我不知道为什么!

这里的代码进入我的 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

            }
        }

感谢您的帮助!

【问题讨论】:

    标签: c# wpf xaml datagrid combobox


    【解决方案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}" />
    

    【讨论】:

    • 谢谢,它就像一个魅力。但是如何绑定所选项目?我在 ElementTableau 中放置了一个属性,即“VersionSelected”。感谢您的帮助
    • 非常感谢。我以为我尝试过这个解决方案。
    猜你喜欢
    • 1970-01-01
    • 2012-01-23
    • 2019-11-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多